Python3 正则表达式模块 —— re
简述
Python正则表达式风格类似Perl
Python官方文档
注:Python正则表达式适用于
str
和bytes
类型,但不可混用;
正则表达式语法
特殊字符
.
默认模式下,匹配任一字符(不包括换行),如果指定re.DOTALL则匹配任一字符(包括换行);^
默认仅匹配字符串开始内容(仅指字符串内容的开始,不会匹配新的换行后的内容),如果指定re.MULTILINE则会匹配每个字符串行首的内容;$
默认仅匹配字符串开始内容,指定re.MULTILINE匹配规则同^
;*
匹配前面正则表达式 0+ 次(表示匹配0或者多次);+
匹配前面表达式 1+ 次;?
匹配前面表达式 0/1 次;*?,+?,??
限制*
,+
,?
匹配程度,将其匹配内容最小化,如使用'<.*?>'
匹配'<a>'
;{m}
表示匹配的前面正则表达式的次数需满足m
次;{m,n}
表示匹配前面正则表达式m-n
次,n设置为空时,设置m可设置最小次数;m为空时,设置n可设置为最大次数;{m,n}?
表示进行最小值m次数进行匹配;对内容进行转义;
[]
用于声明字符集,如下所示:- 单独列出的字符,如[awk],表示匹配
a,w,k
任一; - 字符范围,如[a-z](小写a至z),[0-5][0-9](00-59),[0-9A-Fa-f](表示十六进制);
- 特殊字符在
[]
中失去特殊意义,如[(*^+)]
,匹配中间任一单一字符;^
出现在[]
中最前面位置时,表示匹配内容不包括[]中^
字符后的正则匹配内容;]
出现在匹配集合时,需对其进行转义或将其放置到匹配内容的最前面,如[()[]{}]
或[][(){}]
- 在集合中接受字符类,如
S
w
。
- 单独列出的字符,如[awk],表示匹配
|
如A|B
,对A或B进行匹配,如果A匹配成功,则不会进行B匹配,匹配从左到右进行;(...)
匹配括号内的正则表达式,并表明匹配组的开始和结束;(?...)
扩展符号((
后?
无具体意义,仅表示扩展的语法结构)不会创建新的组,但是(?P<name>...)
是唯一的例外,如下为支持的扩展:(?aiLmsux)
用于包含正则模块标志成为正则表达式的一部分,而不是将标志选项传递至re.compile()
函数;a
==re.A
,表示ASCII-only
匹配;i
==re.I
,表示ignore case
匹配;L
==re.L
,表示locale dependent
匹配;m
==re.M
,表示multi-line
匹配;s
==re.S
,表示dot matches all
匹配;u
==re.U
,表示Unicode matching
匹配;x
==re.X
,表示verbose
匹配;
(?:...)
正则圆括号的非捕获版本,匹配括号内的任意正则表达式,但是在执行完匹配或者模型引用后,通过正则组匹配的子字符串无法被检索;(?imsx-imsx:...)
为表达式部分设置或移除对应i m s x
标志;(?P<name>...)
类似正则圆括号匹配,但是通过正则组匹配的子字符串可以通过符号连接式的组名访问(组名必须为有效的Python标志,每个组名必须唯一的定义),命名组在三种上下文中的引用方式,如(?P<quote>['"].*?)(?P=quote)
:- 在同样的匹配模型中引用:
- (?P=quote)
- 1
- 当处理匹配对象,如m时:
- m.group('quote')
- m.end('quote')
- 在一个字符串中将其传递给re.sub()的repl选项:
- g
- g<1>
- 在一个字符串中将其传递给re.sub()的repl选项:
- g
- 1
- g
- 在同样的匹配模型中引用:
(?P=name)
对命名组的后向引用,它匹配通过之前组名匹配的任何文本;(?#...)
一种评论,括号内的内容被简单忽略;(?=...)
此称谓‘前瞻断言’,当其匹配成功后,返回后面的内容,如:Isaac(?=Asimov)
表示如果Asimov
跟在Isaac
后面,则匹配Isaac
;
(?!...)
此称谓’反向前瞻断言‘,与(?=...)
相反;(?<=...)
匹配正则表达式后面的内容,如:(?<=abc)
匹配abcdef
后为def
;
(?<!...)
与`(?<=...)相反;(?(id/name)yes-pattern|no-pattern)
特殊字符序列
umber
匹配相同数字组的内容,仅可以匹配前99个组中的1个,0或3位的数字不会被当作组匹配解释,而是作为十进制值来做匹配;A
仅匹配字符串的开始;匹配空字符串,但仅限于单词的开始或者结尾,空字符串指的是匹配内容为
非组成单词的字母
,如r'foo'
匹配foo
,foo.
,bar foo
,(foo)
等;B
匹配空字符串,但是仅仅当其不在单词的开始或者结尾,如r'pyB'
匹配python3
,py3
,非py
或py.
;d
str
匹配任何的Unicode十进制数字;bytes
匹配任何十进制数字;D
匹配任意非十进制数字,注意ASCII标志的区别,是d
的反面;s
str
匹配Unicode空白字符,包括v f
和其它在印刷中授权的空白字符,如果指定ASCII标志,则只仅仅匹配v vf
;S
是s
的反面,指匹配非空白字符;w
匹配Unicode字符集,如果指定ASCII
标志,则指[a-z0-9A-Z]
;W
匹配w
的反面,指定ASCII
时,等同[^a-z0-9A-Z]
;仅仅匹配字符串的末尾。
模块内容
模块常量
- re.A | re.ASCII
- re.DEBUG
- re.I | re.IGNORECASE
- re.L | re.LOCALE
- re.M | re.MULTILINE
- re.S | re.DOTALL
- re.X | re.VERBOSE
模块函数
- re.compile(pattern, flag=0),生成正则表达式对象;
- re.search(pattern, string, flags=0) 如果无匹配,返回None;
- re.match(pattern, string, flag=0);
- re.fullmatch(pattern, string, flag=0);
- re.split(pattern, string, maxsplit=0, flag=0);
- re.findall(pattern, string, flag=0);
- re.finditer(pattern, string, flag=0);返回可迭代的匹配对象
- re.sub(pattern, repl, string, count=0, flag=0) 重构匹配对象;
- re.subn 同上,返回元组;
- re.escape(pattern) 生成对象的匹配模型,除了
ASCII字符
,数字
和_
; - re.purge() 清除正则表达式缓存;
正则表达式对象
正则表达式对象生成:pattern = re.compile('pattern')
- regex.search(string[,pos[, endpos]])
- regex.match(string[, pos[, endpos]])
- regex.fullmatch(string[, pos[, endpos]])
- regex.split(string, maxsplit=0)
- regex.findall(string[, pos[, endpos]])
- regex.finditer(string[, pos[, endpos]])
- regex.sub(n)(repl, string, count=0)
- regex.flags
- regex.groups
- regex.groupindex
- regex.pattern 正则表达式模型字符串
匹配对象
匹配对象总返回True
的布尔值。
match = re.search(pattern, string)
- match.expand(template)
- match.group([group1,...])
- match.groups(default=None)
- match.groupdict(default=None)
- match.start([group])
- match.end([group])
- match.span([group])
- match.pos
- match.endpos
- match.lastindex
- match.lastgroup
- match.re
- match.string