正则表达式 | 含义 | 例子 |
---|---|---|
\d | 匹配一个数字 | '00\d':'001' |
\b | 匹配一个单词边界,即单词和空格间的位置 | 'er\b':never |
\B | 匹配非单词边界 | 'er\B':verb |
\w | 匹配一个数字或字母 | '\w\d':'p1' |
\W | 匹配任何非单词字符 | |
\s | 匹配一个空格字符 | |
\S | 匹配任何非空白字符 | |
. | 匹配任意字符(除换行符\n,\r) | 'a.':'a!' |
* | 表示任意个字符(包括0个) | |
+ | 表示至少一个字符 | |
? | 表示零个或一个字符 | |
{n} | 表示n个字符 | '\d{2}':'00' |
{n,m} | 表示n-m个字符 | '\d{1-4}':'1234' |
[ ] | 表示范围 | [0-9a-zA-Z ]:匹配一个数字或字母 |
A|B | 表示可以匹配A或B | (P|p)ython:Python|python |
^ | 表示行的开头 | ^\d:必须以数字开头 |
$ | 表示行的结束 | \d$:必须以数字结束 |
re模块
Python增加了re模块使python语言拥有全部正则表达式的功能。
re.match(pattern,string,flags=0):从字符串起始位置匹配一个模式,匹配成功返回一个匹配的对象,失败,返回None。
分组:用( )表示要提取的分组
例:判断邮箱格式是否正确
str='www.12345@163.com'
oo=re.match(r'^([0-9a-zA-Z]*)@([0-9a-zA-Z]*)(\.com)$',str)
print(oo.group(0))
print(oo.group(1))
print(oo.group(2))
print(oo.group(3))
结果:
re.search(pattern,string,flags=0):扫描整个字符串返回第一个成功的匹配,匹配成功返回一个匹配的对象,失败返回None。
se=re.search('@','12345@163.com')
search( )与match( )区别:
search( ):遍历整个字符串,寻找匹配的对象。
match ( ):从字符串的起始位置进行比较,若起始位置不匹配,则匹配失败。
ma=re.match('com','12345@163.com')
ma_1=re.match('1234','12345@163/com')
se=re.search('com','12345@163.com')
print(ma)
print(ma_1)
print(se)
结果:
re.compile():用于编译正则表达式(当一个正则表达式需重复使用几千次时,为提高效率,可以使用该方法对该正则表达式进行预编译),编译后生成Regular Expression对象。
pattern=re.compile(r'^([0-9a-zA-Z]*)@([0-9a-zA-Z]*)(\.com)$')
ma=pattern.match('12345@163.com')
print(ma.group(0))
结果:
re.split(pattern, string[, maxsplit=0, flags=0]):按照能够匹配的子串将字符串分割后返回列表。
例:
str=re.split(r'\s+','a b c d')
print(str)
结果
正则表达式在匹配时是贪婪匹配尽可能匹配多的字符。
ma=re.match('(\d+)(0*)$','12300000000')
print(ma.group(1))
print(ma.group(2))
结果:
在\d+后加?采用非贪婪匹配
ma=re.match('(\d+?)(0*)$','12300000000')
print(ma.group(1))
print(ma.group(2))
结果:
正则表达式修饰符—可选修饰(flags)
作用:控制匹配模式,多个标志可以通过按位或(|)来表示。如re.I|re.M。
修饰符 | 含义 |
---|---|
re.I | 匹配时对大小写不敏感 |
re.M | 多行匹配,影响^、$ |
re.S | 使.匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符解析字符。影响\w,\W,\b,\B |