用处:通过元字符及其不同的组合来构成(预定义的特定模式),用来匹配一定具有共同特征的字符串
目录
元字符
常用元字符:
代码 说明
. 默认匹配换行符以外的单个字符,单行模式下也可以匹配换行符* 匹配位于*之前的字符或子模式的0次或多次重复
+ 匹配位于+之前的字符或子模式的1次或多次重复
? 匹配位于?之前的字符或者子模式0次或1次出现
\num 此处的num是一个表示子模式序号的正整数
\w 匹配字母或数字或下划线
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束\n 匹配换行符
\r 匹配回车符
^ 匹配行头
$ 匹配行尾\\ 匹配 \
常用反义元字符:
代码 说明
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^abc] 匹配除了abc这几个字母以外的任意字符
常用重复限定符:
代码 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
其它:
[ ] 匹配位于[]中的任意一个字符,表示范围
( ) 将位于()中的内容作为一个整体对待,表示子模式
元字符实例
1.\num详解
在匹配过程中引用前面子模式已匹配的字符
例如:
import re
a = "abc><abc"
n = re.match(r"(.+)><\1",a)
print(n)
运行结果是
<re.Match object; span=(0, 8), match='abc><abc'>
此外:
# 例4-6 查找文本中ABAC和AABB形式的成语。
from re import findall
text = '''行尸走肉、金蝉脱壳、百里挑一、金玉满堂、
背水一战、霸王别姬、天上人间、不吐不快、海阔天空、
情非得已、满腹经纶、兵临城下、春暖花开、插翅难逃、
黄道吉日、天下无双、偷天换日、两小无猜、卧虎藏龙、
珠光宝气、簪缨世族、花花公子、绘声绘影、国色天香、
相亲相爱、八仙过海、金玉良缘、掌上明珠、皆大欢喜\
浩浩荡荡、平平安安、秀秀气气、斯斯文文、高高兴兴'''
pattern = r'(((.).\3.)|((.)\5(.)\6))'
for item in findall(pattern, text):
print(item[0])
该题pattern行中,\3,\5,\6分别是对第三个,第五个,第六个左括号在内的子模式进行再次调用
运行结果是
不吐不快 绘声绘影 相亲相爱 浩浩荡荡 平平安安 秀秀气气 斯斯文文 高高兴兴
2.检验是否为合法IP地址
'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\$'
3.检验是否为合法电话号码形式
'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$'
4.匹配最多带有两位小数的数
'^(-)?\d+(\.\d{1,2})?$'
5.匹配常见汉字
'[\u4e00-\u9fa5]'
6.匹配常见邮箱
'^\w+@(\w+\.)+\w+$'
7.P用法
'((?P<f>\b\w+\b)\s+(?P=f))'#匹配连续两次出现的单词