python 66:re正则表达式7(全- tcy)

预定义字符:

 
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\s
s = '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']  

 

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/85157352