匹配规则
$:输入字符串的结尾位置
():标记一子表达式的开始和结束位置
*:匹配前面的子表达式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.sub
subObj = 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"))