本文共 4283 字,大约阅读时间需要 14 分钟。
目录:
预定义字符:
NO | 类别 | 模式 | 描述 | 实例 | 匹配字符串 |
1 | 分界符 | […] | 匹配任意1个字符;逐个列出或给出范围;可以用\w\S等 | rub[ye] | 匹配 "ruby" 或 "rube" |
|
|
| 特殊字符用作原字符;]和-应该放字符集开头或加\;注1 | [xyz]No或[a-c]No | 匹配xNo,yNo,zNo ;[a-zA-Z0-9_] |
2 | 功能字符 | [^...] 反义 | 首字符^表示不在[]中的字符; [a^b] 匹配字符 ’a^b’ | [^abc] | 匹配除abc 之外字符 |
3 | 功能字符 | [...]|[...] | 匹配前或后的全部;限定范围用无捕获组 ‘(?: ) | dog|cat | 匹配dog或cat; r’I have a (?:dog|cat)’ |
| 预定义字符 |
| 可写在字符集中[...] |
|
|
1 | 预定义字符 | \d | 1位数字; 等价[0-9] | a\dc | a1c |
2 | 预定义字符 | \D 反义 | 1位非数字 等价[^\d] | a\Dc | abc |
3 | 预定义字符 | \w | 字母数字下划线或汉字 等价[a-zA-Z0-9_] | a\wc | abc |
4 | 预定义字符 | \W 反义 | 非单词字符即特殊字符 等价[^a-zA-Z0-9_] | a\Wc | a c |
| 数量词 |
| (用在字符或(…)之后) |
|
|
1 |
| . | 匹配任意除换行符外1个字符 | a.c;.* | abc;任意数量字符不含换行符 |
2 | 重复限定符 | re * 等价{0,} | 匹配前1个字符或表达式0-无限次 注3 | abc* | ab,abccc |
3 | 重复限定符 | re+等价{1,} | 匹配前1个字符或表达式1-无限次 | abc+ | abc,abccc |
4 | 重复限定符 | re? 等价{0,1} | 匹配前1个字符或片段0-1次;在* +? {m,n}后表示非贪婪 | abc? ; a+? | ab,abc ;*? +? ?? {m,n}? |
5 | 重复限定符 | re{m} | 精确匹配前1个字符m次 | o{2} | bob不匹配;fooood匹配[oo oo] |
6 | 重复限定符 | re{ m,} | 匹配m个前面表达式 贪婪方式 | o{2,} | bob不匹配;fooood匹配[oooo] |
7 | 重复限定符 | re{m,n} | 匹配前个字符m-n次;(省略m匹配0-n次)贪婪方式 | o{1,3} | bob fooood'匹配['o', 'ooo', 'o'] |
| 边界匹配 |
|
|
|
|
1 | 功能字符 | ^ | 匹配字符串或多行开头 | ^abc | abc |
2 | 预定义字符 | \A | 仅匹配全部字符串开头;包括MULTILINE模式 | \Aabc | abc |
3 | 功能字符 | $ | 匹配字符串末尾或后跟换行符的任何位置 | abc$ | abc |
4 | 预定义字符 | \Z | 仅匹配str结束,不匹配其他行 | abc\Z | abc |
5 | 预定义字符 | \b 0长度 | 匹配单词边界;匹配完str不含分界字符; | \bhi\b | 精确地查找hi这个单词 |
6 | 预定义字符 | \B 0长度 | 匹配非边界 | a\Bbc | abc |
7 | 预定义字符 | \s | 匹配空白字符[空格\t\r\n\f\v];单词边界;匹配含分界字符 | a\sc | a c |
8 | 预定义字符 | \S 反义 | 非空白字符[^\s] | a\Sc | abc |
| 组 |
|
|
|
|
1 | 无命名组 | (exp) | 匹配括号内的表达式;并捕获文本到自动命名的组里 | a(1,2,3|4,5,6)c | a456c “ |”仅在该组中有效 |
2 | 扩展符号 | (?P<name>exp) | 匹配exp,并捕获文本到name组里 | (?p<id>abc){2} | abcabc;也可以写成(?'name'exp) |
3 |
| \n | 匹配第n个分组的内容。 | (\d)abc\1 | 1abc1,5abc5 |
4 | 引用 | (?P=name) | 引用分组name匹配到的字符串(不作为分组) | (?P<id>\d)abc(?P=id) | 1abc1,5abc5 |
5 |
| m.group('') | 当处理匹配对象m时; | m.group('quote') | 返回指定组内容 |
6 | 参数 | \g<...>或\1 | 用作参数;如传递给repl 参数的字符串中re.sub() |
| \g<quote>或\g<1>或\1 |
7 |
| (p)* ;+;{m,n} | (pattern)*允许模式重复0次或多次 |
|
|
| 扩展符号 |
|
|
|
|
1 |
| (?...) | (…)的不分组版本,用于使用‘|’或后接数量词 | (?:abc){2} | abcabc |
2 | 扩展符号 | (? :exp) | 匹配exp,不捕获匹配文本;不分配组号 |
| 注2 |
3 | 条件匹配 | (?(... )a|b) | (?(n /name )yes-pattern|no-pattern) 注5 | (\d)abc(?(1)\d|abc) | 1abc2,abcabc |
4 | 扩展符号 | (?iLmsux:re) | 在括号中使用i, m, x 可选标志 注4 | (?i)abc | ABC |
5 | 扩展符号 | (?-imx:...) | 括号中不用i, m, x,s 可选标志只影响括号中的区域 | (?aiLmsux-imsx:...) |
|
6 | 前向界定 | (?<=常量) 0长度 | 之前str需匹配表达式(结果str除外) | (?<=\bis)\w+\b,isad1 | 匹配is开头的后半部分(除is部分)ad1 |
7 | 后向界定 | (?=exp) 0长度 | 之后str需匹配表达式(结果str除外) | \b\w+(?=ing\b),ssing | 匹配ing结尾前面部分(除ing部分)ss |
8 | 前向非界定 | (?<!...) 0长度 | 位置的前面不能匹配表达式exp | (?<![a-z])\d{7} | 匹配前面不是小写字母的七位数字 |
9 | 后向非界定 | (?!...) 0长度 | 位置的后面不能匹配表达式exp | \d{3}(?!\d) | 匹配三位数字,三位数字后不是数字 |
10 |
| (?#...) | #后内容注释 | abc(?#comment)123 | abc123 |
|
|
|
|
|
|
| 注1:要匹配']'集合中的文字,请在其前面加上反斜杠,或将其放在集合的开头。例如,无论是[()[\]{}]和 []()[{}]都将匹配一个括号 | ||||
| 注2:但在执行匹配或稍后在模式中引用后,无法检索组匹配的子字符串 。 |
|
| ||
| 注3:重复限定符*+?{m,n}不能直接嵌套。应用第二次重复可用括号。例如,表达式(?:a{6})*匹配六个'a'字符的任意倍数。 | ||||
| 注4:iLmsux的每个字符代表一个匹配模式,只影响括号中的区域 |
|
| ||
| 注5:如果编号为id/别名为name的组匹配到字符,则需要匹配yes-pattern,否则需要匹配no-pattern;|no-pattern可以省略 | ||||
| 注6:子模式后面加上问号,它就变成了可选项r"(http://)?(www\.)?python\.org" |
|
|
实例-基本规则:
# 实例1:.re.findall(r'.+','12\n45\n78') # ['12', '45', '78']re.findall(r'.+' , '12\n45\n78' , re.S) # ['12\n45\n78']# 实例2:^$s= '12 34\n56 78\n90're.findall( r'^\d+' , s , re.M ) # 匹配位于行首的数字 # ['12', '56', '90']re.findall( r'\A\d+', s , re.M ) # 匹配位于字符串开头的数字# ['12']re.findall( r'\d+$' , s , re.M ) # 匹配位于行尾的数字 # ['34', '78', '90']re.findall( r'\d+\Z' , s , re.M )# 匹配位于字符串尾的数字 # ['90']# 实例3:\b\ss = 'abc abcde bc bc're.findall( r'\bbc\b' , s )# 完全匹配单词 'bc' #['bc', 'bc']re.findall( r'\sbc\s' , s )# 完全匹配单词 'bc' #[' bc '] 无空格不匹配# '\B' 匹配非边界re.findall( r'\Bbc\W+' , s )#匹配包含 'bc' 但不以 'bc' 为开头的单词 # ['bc ']# 实例4:(?:)无捕获组# 将一部分规则作为一个整体对它进行某些操作,比如指定其重复次数时s='ababab abbabb aabaab're.findall( r'\b(?:ab)+\b' , s )#匹配字符串中重复的 'ab' # ['ababab']re.findall( r'\b(ab)+\b' , s ) #成为了一个组 # ['ab']
实例-重复:
# 重复规则形式在一条字符规则后面紧跟一个表示重复次数的规则# 实例1:*+匹配前是字母,后是数字或没有s = ' aaa bbb111 cc22cc 33dd 're.findall(r'\b[a-z]+\d*\b', s) # 单词边界 #['aaa', 'bbb111']re.findall(r'[a-z]+\d*', s) # 单词给拆开 # ['aaa', 'bbb111', 'cc22', 'cc', 'dd'] # 实例2:?匹配一个数字s = ' 123 10e3 20e4e4 30ee5 're.findall( r' \b\d+[eE]?\d*\b' , s )# ['123', '10e3']# 实例3:精确匹配{m}和最小匹配{m,}匹配范围{m,n}s= '1 22 333 4444 55555 666666 're.findall( r'\b\d{3}\b', s ) #精确匹配 m 次 #['333']re.findall( r'\b\d{3,}\b', s ) #['333', '4444', '55555', '666666']re.findall( r'\b\d{,3}\b', s ) #['1', '', '22', '', '333', '', '', '', '', '', '', '']re.findall( r'\b\d{0,3}\b', s ) #['1', '', '22', '', '333', '', '', '', '', '', '', '']re.findall( r'\b\d{1,6}\b', s ) #['1', '22', '333', '4444', '55555', '666666']
转载地址:https://chunyou.blog.csdn.net/article/details/85157352 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!