-
定义:文本的高级匹配模式,其本质是由一系列字符和特殊符号构成的字串,即正则表达式。
-
原理:通过普通字符和有特定含义的字符,来组成字符串,用以描述一定的字符串规则,比如:重复,位置等,来表达某类特定的字符串,进而匹配。
| 元字符 | 匹配规则 |
|---|---|
| 普通字符 | 每个普通字符匹配其对应的字符 |
| | | 或关系,匹配|两侧任意的正则表达式即可 |
| . | 匹配除换行外的任意单个字符 |
| [字符集] | 匹配字符集中的任意一个字符,[0-9] [a-z] [A-Z]表示区间内任意一个字符 |
| [^字符集] | 匹配除了字符集以外的任意一个字符 |
| * | 匹配前面的字符出现0次或多次 |
| + | 匹配前面的字符出现1次或多次 |
| ? | 匹配前面的字符出现0次或1次 |
| {n} | 匹配前面的字符出现n次 |
| {m,n} | 匹配前面的字符出现m-n次 |
| ^ | 匹配目标字符串的开头位置 |
| $ | 匹配目标字符串的结尾位置 |
| d | 匹配任意数字字符 |
| D | 匹配任意非数字字符 |
| w | 匹配普通字符, 普通字符指数字,字母,下划线,汉字 |
| W | 匹配非普通字符,指除数字,字母,下划线,汉字外的字符 |
| s | 匹配空字符,空字符指 空格r n t v f 字符 |
| S | 匹配非空字符 |
| b | 匹配单词的边界位置,单词边界指普通字符与其他字符的交界位置 |
| B | 匹配非单词的边界位置 |
注意: 当元字符与Python字符串中转义字符冲突的情况则需要使用r将正则表达式字符串声明为原始字符串,如果不确定那些是Python字符串的转义字符,则可以在所有正则表达式前加r。
| 类别 | 元字符 |
|---|---|
| 匹配字符 | . [...] [^...] d D w W s S |
| 匹配重复 | * + ? {n} {m,n} |
| 匹配位置 | ^ $ b B |
| 其他 | | () |
"""
示例:元字符使用
"""
#导入re模块
import re
#匹配普通字符
result=re.findall('hello','hello world')
print(result)
#或关系
result=re.findall('com|cn','www.baidu.com.cn')
print(result)
#匹配任意一个字符,除了n
result=re.findall(".总",'王总,李总,张总,赵总')
print(result)
#匹配字符集中的一个字符
result=re.findall('[abcd]','hello world')
result=re.findall("[!a-z]",'hello world!') #混合书写,区间表达一般写在后面
print(result)
#字符集取反
result=re.findall('[^a-d]','abcde')
print(result)
#匹配重复0次或多次
result=re.findall('wo*w','wow!woooow ww!')
print(result)
#匹配重复1次或多次
result=re.findall('wo+w','wow!woooow ww!')
print(result)
#匹配重复0次或1次
result=re.findall('wo?w','wow!woooow ww!')
print(result)
#匹配重复指定次数
result=re.findall("wo{4}",'wow!woooow ww!')
print(result)
#匹配重复{m-n}次
result=re.findall("wo{1,4}",'wow!woooow ww!')
print(result)
#匹配开头结尾位置
result=re.findall("^hi","hi,baby") #开头
result=re.findall("baby$","hi,baby") #结尾
print(result)
#匹配数字字符或非数字字符
result=re.findall("d+","id:1345,eid:87") #数字字符
result=re.findall("D+","id:1345,eid:87") #非数字字符
print(result)
#匹配w普通字符和W非普通字符
result=re.findall("w+","hi,数字小姐!") #普通字符,数字字母汉字下划线
result=re.findall("W+","hi,数字小姐!") #除普通字符外的字符
print(result)
#匹配s空字符和S非空字符
result=re.findall("s+","hi babyn")
result=re.findall("S+","hi babyn")
print(result)
#匹配b边界和B非边界
result=re.findall(r"bisb","is this your handbag?")
print(result)
笔记内容参考自:达内吕泽老师



