正则表达式① 元字符
-
定义:文本的高级匹配模式,其本质是由一系列字符和特殊符号构成的字串,即正则表达式。
-
原理:通过普通字符和有特定含义的字符,来组成字符串,用以描述一定的字符串规则,比如:重复,位置等,来表达某类特定的字符串,进而匹配。
元字符
元字符 | 匹配规则 |
---|---|
普通字符 | 每个普通字符匹配其对应的字符 |
| | 或关系,匹配|两侧任意的正则表达式即可 |
. | 匹配除换行外的任意单个字符 |
[字符集] | 匹配字符集中的任意一个字符,[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 baby\n")
result=re.findall("\S+","hi baby\n")
print(result)
#匹配\b边界和\B非边界
result=re.findall(r"\bis\b","is this your handbag?")
print(result)
笔记内容参考自:达内吕泽老师