re模块
result = re.match(正则表达式,要匹配的字符串)
字符串匹配正则表达式,则match方法返回匹配对象(Match Object),否则返回None(注意不是空字符串"")
正则表达式的单字符匹配
Python中字符串前面加上 “r” 表示原生字符串,因为"\“既可表示转义字符也可表示字符”\"
匹配多个字符的相关格式
表示边界
$前匹配的字符串必须是在最后的位置
匹配分组
搜索
search
>> ret = re.search(r"\d+", "阅读次数为 9999")
>> ret.group()
'9999'
findall
>> ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
>> print(ret)
['9999', '7890', '12345']
sub 将匹配到的数据进行替换
方法1
>> ret = re.sub(r"\d+", '998', "python = 997")
>> print(ret)
998
方法2
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r"\d+", add, "python = 997")
print (ret)
998
split 根据匹配进行切割字符串,并返回一个列表
ret = re.split(r": | ","info:xiaoZhang 33 shandong")
print(ret)
['info', 'xiaoZhang', '33', 'shandong']
python贪婪和非贪婪
贪婪:尝试匹配尽可能多的字符,非贪婪则相反
在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'
>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1)
'2343'
>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>> re.match(r"aa(\d+?)ddd","aa2343ddd").group()
'aa2343ddd'
注意:()小括号里为返回项,group(k)为第k个括号匹配到的项,group()没有参数则返回所有匹配项
编译
如果一个正则表达式要重复使用几千次,可以预编译该正则表达式,以省去后面的编译过程
>>> re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$') #编译
>>> re_telephone.match('010-12345').groups()
('010', '12345')
参考文献
【1】正则表达式