python正则表达式
用于检查一个字符串是否与某种模式匹配的表达式。
在python中re模块支持该功能。
先来看re模块中正则表达式中的处理函数:
1.re.match
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
实例:
import re #导入re模块
str_a = '123afs456'
pattern = '\d+'
ret = re.match(pattern, str_a, flags=re.I)
#pattern:代表要匹配的正则表达式 str_a:要匹配的字符串 flags:标志位用于控制正则表达式的匹配方式
print(ret.group())
group:返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
groups: 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
2.re.search方法:
扫描整个字符串并返回第一个成功的匹配。
实例:
str_a = '123afs456'
pattern = '\w+'
ret = re.search(pattern,str_a)
print(ret.group())
print(ret.span()) #获取索引位置
运行:123afs456
(0, 9)
re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
而re.search匹配整个字符串,直到找到一个匹配。
实例:
line = "Cats are smarter than dogs"
matchobj = re.match(r'dogs',line) #match
if matchobj:
print(matchobj.group())
else:
print('Not match') #运行结果:Not match
matchobj = re.search(r'dogs',line) #search
if matchobj:
print(matchobj.group())
else:
print('Not match') #运行结果:dogs
3.re.sub
e.sub用于替换字符串中的匹配项
import re
a_str = '123456789,nihao'
ret = re.sub('\d+','test',a_str,count=0,flags=re.I)
第一个参数:正则中的模式字符串
第二个参数:替换的字符串,也可以为函数
第三个参数:要被查找替换的原始字符串
第四个参数:模式匹配后替换的最大次数,默认0表示替换所有
print(ret) #运行结果:test,nihao
4.re.compile
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
# 提高匹配的效率
a_str = '13132nslvn\nVVV'
line = re.compile(r'\d+',re.I|re.S)
ret = line.match(a_str,0,5) #从'0'的位置开始匹配,正好匹配
print(ret.group()) #用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
print(ret.start()) #于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0
print(ret.end()) #用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0
print(ret.span()) #返回 (start(group), end(group))
运行结果:
13132
0
5
(0, 5)
5.findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
a_str = re.compile(r'\d+') #查找数字
ret = a_str.findall('dbfg43435d4fbdb4d53b4df') #查找所有
ret1 = a_str.findall('dbfg43435d4fbdb4d53b4df',0,6) #根据范围
ret2 = a_str.findall('dbfg43435d4fbdb4d53b4df',0,4)
print(ret) #['43435', '4', '4', '53', '4']
print(ret1) #['43']
print(ret2) #[] 没有匹配到返回空列表
6.finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
a_str = re.compile(r'\d+')
ret = a_str.finditer('dbfg43435d4fbdb4d53b4df')
for i in ret: #for循环遍历
print(i.group())
7.re.split
split 方法按照能够匹配的子串将字符串分割后返回列表
a_str = re.compile(r'\d+') #指定规则
ret = a_str.split('dbfg43435d4fbdb4d53b4df') #满足的开始切
print(ret) #返回是一个列表['dbfg', 'd', 'fbdb', 'd', 'b', 'df']