匹配规则
$:输入字符串的结尾位置
():标记一子表达式的开始和结束位置
*:匹配前面的子表达式0次或者多次
+:匹配前面的子表达式1次或者多次
?:匹配前面的子表达式0次或者1次
^:匹配输入字符串的开始位置
{n}:匹配确定的n次
{n,}:匹配至少n次
{n,m}:最少匹配n次,最多匹配m次
[ABC]:匹配A、B、C字母
[^ABC]:不匹配A、B、C字母
[A-Z]:表示区间,匹配所有大写字母\w:匹配字母、数字、下划线 === [A-Za-z0-9_]
修饰符
i:不区分大小写
g:全局匹配
m:多行匹配
s:换行符\n
import re# match和search的区别:search匹配整个字符串,match只匹配开始的字符串lines = "Cats are smarter than dogs"# matchObj = re.match(r'(.*) are (.*)? .*', lines, re.M | re.I)# matchObj = re.match(r'dogs', lines, re.M | re.I)matchObj = re.search(r'dogs', lines, re.M | re.I)if matchObj:print("matchObj.group():", matchObj.group())# print("matchObj.group(1):", matchObj.group(1))# print("matchObj.group(2):", matchObj.group(2))else:print("No match!")searchObj = re.search('(.*) are (.*)? .*', lines, re.M | re.I)print(searchObj.span())# 检索和替换 re.subsubObj = re.sub(r'Cats', '', lines)print(subObj)# 删除注释phone = "1583434343 # 这是电话"num = re.sub(r'#.*$', "", phone)print(num)# 编译正则表达式,传给match、search使用re_com = re.compile(r'(\d+)')print(re_com.search("343df232"))# findall匹配所有子串,返回列表re_findall = re_com.findall("343df232")print("findall返回匹配list:", re_findall)# finditer匹配所有子串,返回迭代器re_finditer = re_com.finditer('343df232')for i in re_finditer:print("返回迭代器:", i.group())# re.split 按匹配规则分割并返回列表print(re.split(" ", "zaygee hoan jaygee"))
