元字符表
符号 | 说明 | 示例 |
. | 表示任意字符 | 'abc' >>>'a.c' >>>结果为:'abc' |
^ | 表示字符开头 | 'abc' >>>'^abc' >>>结果为:'abc' |
$ | 表示字符串结尾 | 'abc' >>>'abc$' >>>结果为:'abc' |
*, +, ? | '*'表示匹配前一个字符重复 0 次到无限次,'+'表示匹配前一个字符重复 1次到无限次,'?'表示匹配前一个字符重复 0 次到1次 | 'abcccd' >>>'abc*' >>>结果为:'abccc' 'abcccd' >>>'abc+' >>>结果为:'abccc' 'abcccd' >>>'abc?' >>>结果为:'abc' |
*?, +?, ?? | 前面的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后面加?号使其变成惰性匹配即非贪婪匹配 | 'abc' >>>'abc*?' >>>结果为:'ab' 'abc' >>>'abc??' >>>结果为:'ab' 'abc' >>>'abc+?' >>>结果为:'abc' |
{m} | 匹配前一个字符 m 次 | 'abcccd' >>>'abc{3}d' >>>结果为:'abcccd' |
{m,n} | 匹配前一个字符 m 到 n 次 | 'abcccd' >>> 'abc{2,3}d' >>>结果为:'abcccd' |
{m,n}? | 匹配前一个字符 m 到 n 次,并且取尽可能少的情况 | 'abccc' >>> 'abc{2,3}?' >>>结果为:'abcc' |
对特殊字符进行转义,或者是指定特殊序列 | 'a.c' >>>'a.c' >>> 结果为: 'a.c' | |
[] | 表示一个字符集,所有特殊字符在其都失去特殊意义,只有: ^ - ] 含有特殊含义 | 'abcd' >>>'a[bc]' >>>结果为:'ab' |
| | 或者,只匹配其中一个表达式 ,如果|没有被包括在()中,则它的范围是整个正则表达式 | 'abcd' >>>'abc|acd' >>>结果为:'abc' |
( … ) | 被括起来的表达式作为一个分组. findall 在有组的情况下只显示组的内容 | 'a123d' >>>'a(123)d' >>>结果为:'123' |
(?#...) | 注释,忽略括号内的内容 特殊构建不作为分组 | 'abc123' >>>'abc(?#fasd)123' >>>结果为:'abc123' |
(?= … ) | 表达式’…’之前的字符串,特殊构建不作为分组 | 在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’ |
(?!...) | 后面不跟表达式’…’的字符串,特殊构建不作为分组 | 如果’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’ |
(?<= … ) | 跟在表达式’…’后面的字符串符合括号之后的正则表达式,特殊构建不作为分组 | 正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’ |
(?:) | 取消优先打印分组的内容 | 'abc' >>>'(?:a)(b)' >>>结果为'[b]' |
?P<> | 指定Key | 'abc' >>>'(?P<n1>a)>>>结果为:groupdict{n1:a} |
元字符分类
- 任意匹配元字符
- 边界限制元字符
- 限定符
- 模式选择符
- 模式单元
①任意匹配元字符
#-*- codingn:utf-8 -*- import re pattern = 'abc' print("结果:%s"%re.search('a.c',pattern))
②边界限制元字符
边界限制符,’^’匹配字符串的开始,使用’$’匹配字符串的结束
#-*- codingn:utf-8 -*- import re pattern1 = 'Hello' print("结果1:%s"%re.search('^H',pattern1)) print("结果2:%s"%re.search('o$',pattern1))
运行结果
③限定符
常见的限定符包括*、?、+、{n}、{n,}、{n,m}
#-*- codingn:utf-8 -*- import re pattern1 = 'mnjsassssh' print("结果1:%s"%re.search('as{2}',pattern1)) print("结果2:%s"%re.search('as{3}',pattern1)) print("结果3:%s"%re.search('as{2,}',pattern1))
运行结果:
④模式选择符
模式选择符’|’
使用模式选择符,可以设置多个模式,匹配时,可以从中选择任意一个模式匹配。
#-*- codingn:utf-8 -*- import re pattern1 = 'mnjsassssh' print("结果1:%s"%re.search('mn|ok',pattern1))
运行结果:
⑤模式选择符
模式单元符(),可以使用’()’将一些原子组合成一个大原子使用,小括号括起来的部分会被当做一个整体去使用
#-*- codingn:utf-8 -*- import re pattern1 = 'mnjsassssh' print("结果1:%s"%re.search('(ss){1,}',pattern1)) #ss至少出现一次 print("结果2:%s"%re.search('(ss){1}',pattern1)) #ss出现一次 print("结果3:%s"%re.search('as{1,}',pattern1)) #a字母后的s至少出现一次 print("结果4:%s"%re.search('as{1}',pattern1)) #a字母后的s出现一次
运行结果: