并非所有的字符串处理都能用正则表达式
使用正则表达式先导入re模块
import re
找到符合r的字串,返回列表
re.findall(r,str)
找到符合r的字串,返回迭代器对象
re.finditer(r,str)
判断字符串的开头是否符合匹配,若符合,返回一个match对象,反之无返回值
re.match(r,str)
判断字符串是否符合匹配,若符合,返回一个match对象,反之无返回值
re.search(r,str)
判断字符串是否符合匹配,并且进行替换,返回替换结果
re.sub(r'[abc]','o','lalala')#返回值为'lololo'
判断字符串是否符合匹配,并且进行替换,返回替换结果和替换次数
re.subn(r'[abc]','o','lalala')#返回值为'lololo'
根据正则表达式分割字符串
re.split(r'[\+\-\*]','123-456+789*000')#返回值为['123', '456', '789', '000']
re.findall(r'hello','hello world')
1.字符集[ ]#可识别出hella helle helli helli hello hellu ##字符集内若加元字符,需要加\
re.findall(r'hell[aeiou]','hello world')
2.行首搜索 #加在行首##若在字符集[]内,则表示出了后跟的字符以外的字符
re.findall(r'^h','hello world')
3.行尾搜索$ #加在行尾
re.findall(r'ld$','hello world')
4.字符 \
4.1 加在元字符前表示转义#可匹配出该元字符
re.findall(r'\$','123$')
4.2 特殊用法 #预定义字符集
4.2.1数字0-9:[0-9]
\d
4.2.2数字0-9:[0-9]
\D
4.2.3空白字符:[ \t\r\n\f\v]
\s
4.2.4非空白字符:[^ \t\r\n\f\v]
\S
4.2.5单词字符:[0-9a-zA-Z]
\w
4.2.6非单词字符:[^0-9a-zA-Z]
\W
5 重复字符{},*,+,? #均针对前一个字符
5.1{m[,n]}
re.findall(r'\d{11}',tel)#重复查询数字11次,匹配11位电话号码
re.findall(r'\d{8,11}',tel)#重复查询数字8-11次,匹配8位到11位电话号码
5.2*
re.findall(r'\d*',tel)#重复查询数字0到20亿次
5.3+
re.findall(r'\d+',tel)#重复查询数字1到20亿次
5.4? #若为+? 或*?则表示开启非贪婪模式##贪婪模式表示最大匹配,非贪婪模式表示最小匹配
re.findall(r'\d?',tel)#重复查询数字0或1次
编译后运行是为了提高匹配速度
r=r'hello'
r_c=re.compile(r)
r_c.findall('hello world')
若想匹配的时候无视大小写,可在编译正则表达式的时候加入re.I
r=r'hello'
r_c=re.compile(r,re.I)
r_c.findall('HeLLo world')
返回被re匹配的字符串group()
x=re.match(r'a{4}','aaaaaaaa')
x.group() #返回值为‘aaaa’
返回匹配开始的位置start()
x.start()#返回值为0
返回匹配结束的位置end()
x.end()#返回值为4
返回一个元组,其中包含了匹配开始和结束位置span()
x.span()#返回值为(0,4)
在实际应用中
将match object保存在一个变量中,检查其是否为None
if x:
print('The match found')
else:
print('None match')
使得.可以匹配包括换行符在内的字符
re.S
使得正则对大小写不敏感
re.I
做本地化识别匹配#不太懂
re.L
使得匹配的时候,待匹配字符串的换行符被无视
re.M
使得匹配的时候,正则表达式的换行符被无视
re.X
用()分组后,如下代码:
re.findall('\w*@\w*\.(com|cn|org)','[email protected]')#返回值为()内的com
若加(),正则表达式'\w@\w.(com|cn|org)'表示”若干个单词字符@若干个单词字符.可能是(com)也可能是(cn)也可能是(org)“
若不加(),正则表达式'\w@\w.com|cn|org'表示”可能是(若干个单词字符@若干个单词字符.com)也可能是(c)n也可能是(org)“
分组后,findall优先返回分组内部分的匹配。