使用:
import re
re.match(r'partten', data) # 从数据头开始匹配
如果成功匹配返回结果对象,通过.group()获取匹配数据
匹配失败,返回None
re.search(r'partten',data) # 从数据中左往右进行搜索匹配,默认匹配一次
成功匹配返回结果对象,通过.group()获取匹配数据
匹配失败,返回None
元字符
- .匹配1个任意字符,除了\n
- []匹配[]中任意一个字符—白名单
- [^…]匹配不再[]中的任意一个字符—黑名单
- [n-m]匹配n-m中任意一个字符
- \d:匹配一个数字字符
- \D:匹配一个非数字字符
- \s:space空白字符[\r\n\v\t\f]
- \S:非空白字符
- \w:单词字符,[\da-zA-Z_]:注意有下划线
- \W:非单词字符
扩展:py2–按照ascll计算,\w不包括中文
py3–按照unicode计算,\w包含中文
匹配多个字符:
- {n}:匹配n次
- {n,m}:n到m次
- {n,}:至少n次
- +:至少一次
- *:至少0次
- ?:最多1次
位置:
- ^:开始位置
- $:结束位置
分组:
- 目的:提取出整体数据中,符合某种规律的数据
- 创建:(partten)
- 取出数据:
group()===.group(0)表示第0个分组,表示整体匹配结果,正则表达式默认没写最外围的()
.group(n):获取第几组数据 - 分组引用:
- 目的:将前面分组的匹配结果,用到后续某个位置继续匹配
- 使用方法1:\分组编号
re.match(r'^(\d{3,4})-(\d{6,8})\1-\2$","021-1234567 021-1234567")
- 使用方法2:
先给前面的起名(?P)
在后面使用(?P=name)
|(竖线):匹配左边或者右边
- findall(partten,数据)查找数据中符合规律的所有数据,返回成列表
- sub(正则,“替换成的数据”,原数据,count = -1:返回匹配替换之后的数据。
参数2可以是函数名,默认匹配之后一次传入函数参数进行处理,返回字符串 - split(正则,数据)按照正则匹配成功切割,返回值为列表
贪婪模式(默认)
- 非贪婪模式,在量词后面加?
- 贪婪和非贪婪前提是满足整体匹配结果。
\问题,默认\需要\,所以加r可避免麻烦