博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 66:re正则表达式7(全- tcy)
阅读量:1882 次
发布时间:2019-04-26

本文共 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']   

 

转载地址:http://wbqbf.baihongyu.com/

你可能感兴趣的文章
前端(一):字符与语义标签
查看>>
前端(二):CSS语法与选择器
查看>>
前端(三):样式继承与其他概念
查看>>
前端(四):样式继承与其他概念
查看>>
前端小案例:田径场
查看>>
前端(五):浮动
查看>>
前端(六):高度塌陷与BFC
查看>>
C++ 多线程
查看>>
C++ inline 内联函数
查看>>
动态规划问题汇总
查看>>
C++ 面向对象程序设计:数据抽象、继承、多态
查看>>
Ubuntu软件安装&卸载
查看>>
Windows+Ubuntu双系统卸载 || 重新安装Ubuntu
查看>>
C++ Makefile / Cmake 构建工程 & GDB调试
查看>>
Ubuntu常用命令
查看>>
使用Opencv3运行Opencv2开发的程序遇到的bug
查看>>
Pytorch1.1版本pytorch模型转onnx的bug
查看>>
PHP snmpwalk 中文正常显示方法
查看>>
安装net-snmp python模块
查看>>
subprocess.Popen调用Windows命令正确显示中文
查看>>