模块
class re.RegexFlag
re.A
re.ASCII
让 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode。这只对Unicode样式有效,会被byte样式忽略。相当于前面语法中的内联标志 (?a)
re.DEBUG¶
显示编译时的debug信息,没有内联标记。
re.I
进行忽略大小写匹配;表达式如 [A-Z] 也会匹配小写字符。Unicode匹配(比如 Ü 匹配 ü)同样有用,除非设置了 re.ASCII 标记来禁用非ASCII匹配。当前语言区域不会改变这个标记,除非设置了 re.LOCALE 标记。这个相当于内联标记 (?i)
re.L
re.L re.LOCALE
由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配。这个标记只能对byte样式有效。这个标记不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 "习惯”,而且只对8位字节有效。Unicode匹配在Python 3 里默认启用,并可以处理不同语言。 这个对应内联标记 (?L)
**re.M
re.MULTILINE
设置以后,样式字符 ‘^’ 匹配字符串的开始,和每一行的开始(换行符后面紧跟的符号);样式字符 ‘
′
匹配字符串尾,和每一行的结尾(换行符前面那个符号)。默认情况下,
’
’
匹配字符串头
,
′
' 匹配字符串尾,和每一行的结尾(换行符前面那个符号)。默认情况下,’^’ 匹配字符串头,'
′匹配字符串尾,和每一行的结尾(换行符前面那个符号)。默认情况下,’’匹配字符串头,′’ 匹配字符串尾。对应内联标记(?m)
re.NOFLAG
表示未应用任何旗标,该值为 0。 该旗标可被用作某个函数关键字参数的默认值或者用作将与其他旗标进行有条件 OR 运算的基准值。 用作默认值的例子
def myfunc(text, flag=re.NOFLAG):
return re.match(text, flag)
re.S
re.DOTALL
让 ‘.’ 特殊字符匹配任何字符,包括换行符;如果没有这个标记,‘.’ 就匹配 除了 换行符的其他任意字符。对应内联标记 (?s) 。
re.U
re.UNICODE
在 Python 2 中,这个旗标使 特殊序列 在匹配中包含 Unicode 字符。 自 Python 3 起,默认即会匹配 Unicode 字符。
函数
re.compile(pattern, flags=0)
将正则表达式的样式编译为一个 正则表达式对象 (正则对象)
match(), search() 以及其他如下描述:
这个表达式的行为可以通过指定 标记 的值来改变。值可以是以下任意变量,可以通过位的OR操作来结合( | 操作符)。
prog = re.compile(pattern)
result = prog.match(string)
等价于
result = re.match(pattern, string)
re.search(pattern, string, flags=0)
找第一个匹配的
扫描整个 string 查找正则表达式 pattern 产生匹配的第一个位置,并返回相应的 Match。 如果字符串中没有与模式匹配的位置则返回 None;请注意这不同于在字符串的某个位置上找到零长度匹配
re.search("Is", "Isaac").group()
'Is'
re.search("[ac]{1,2}", "Isaac").group()
'aa'
re.search("[ac]{1,2}", "IS_Isaac").group()
'aa'
re.search("[acI]{1,2}", "IS_Isaac").group()
'I'
re.match(pattern, string, flags=0)¶
找开头匹配的
如果 string 开头的零个或多个字符与正则表达式 pattern 匹配,则返回相应的 Match。 如果字符串与模式不匹配则返回 None;请注意这与零长度匹配是不同的。
re.fullmatch(pattern, string, flags=0)
如果整个 string 与正则表达式 pattern 匹配,则返回相应的 Match。 如果字符串与模式不匹配则返回 None;请注意这与零长度匹配是不同的。
re.split(pattern, string, maxsplit=0, flags=0)
用 pattern 分开 string 。 如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里。如果 maxsplit 非零, 最多进行 maxsplit 次分隔, 剩下的字符全部返回到列表的最后一个元素
re.split(r'\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
re.split(r'(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
re.split(r'\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
如果分隔符里有捕获组合,并且匹配到字符串的开始,那么结果将会以一个空字符串开始。对于结尾也是一样
re.split(r'(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
这样的话,分隔组将会出现在结果列表中同样的位置。
样式的空匹配仅在与前一个空匹配不相邻时才会拆分字符串
re.split(r'\b', 'Words, words, words.')
['', 'Words', ', ', 'words', ', ', 'words', '.']
re.split(r'\W*', '...words...')
['', '', 'w', 'o', 'r', 'd', 's', '', '']
re.split(r'(\W*)', '...words...')
['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']
re.finditer
针对正则表达式 pattern 在 string 里的所有非重叠匹配返回一个产生 Match 对象的 iterator。 string 将被从左至右地扫描,并且匹配也将按被找到的顺序返回。 空匹配也会被包括在结果中。
在 3.7 版更改: 非空匹配现在可以在前一个空匹配之后出现了
re.sub(pattern, repl, string, count=0, flags=0)
返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。 如果样式没有找到,则不加改变地返回 string。 repl 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。 也就是说,\n 会被转换为一个换行符,\r 会被转换为一个回车符,依此类推。 未知的 ASCII 字符转义序列保留在未来使用,会被当作错误来处理。 其他未知转义序列例如 & 会保持原样。 向后引用像是 \6 会用样式中第 6 组所匹配到的子字符串来替换
re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
r'static PyObject*\npy_\1(void)\n{',
'def myfunc():')
'static PyObject*\npy_myfunc(void)\n{'
def dashrepl(matchobj):
if matchobj.group(0) == '-': return ' '
else: return '-'
re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'
re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
'Baked Beans & Spam'
re.subn(pattern, repl, string, count=0, flags=0)
行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数)
re.escape(pattern)
这个函数不能被用于 sub() 和 subn() 的替换字符串,只有反斜杠应该被转义。 例如:
re.purge()
清除正则表达式的缓存。
re.subn(pattern, repl, string, count=0, flags=0)
行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数).
在 3.1 版更改: 增加了可选标记参数。
在 3.5 版更改: 不匹配的组合替换为空字符串。
异常
exception re.error(msg, pattern=None, pos=None)
msg¶
未格式化的错误消息。
pattern
正则表达式的模式串。
pos
编译失败的 pattern 的位置索引(可以是 None )。
lineno
对应 pos (可以是 None) 的行号。
colno
对应 pos (可以是 None) 的列号。
在 3.5 版更改: 增加了额外的属性
正则表达式对象 (正则对象)(产生的是是一个表达式对象)
Pattern
由 re.compile() 返回的已编译正则表达式对象。
在 3.9 版更改: re.Pattern 支持用 [] 表示 Unicode (str) 或字节串类型的模式。 参见 GenericAlias 类型
Pattern.search(string[, pos[, endpos]])
扫描整个 string 查找该正则表达式产生匹配的第一个位置,并返回相应的 Match。 如果字符串中没有与模式匹配的位置则返回 None;请注意这不同于在字符串的某个位置上找到零长度匹配。
可选的第二个参数 pos 给出了字符串中开始搜索的位置索引;默认为 0,它不完全等价于字符串切片; ‘^’ 样式字符匹配字符串真正的开头,和换行符后面的第一个字符,但不会匹配索引规定开始的位置。
可选参数 endpos 限定了字符串搜索的结束;它假定字符串长度到 endpos , 所以只有从 pos 到 endpos - 1 的字符会被匹配。如果 endpos 小于 pos,就不会有匹配产生;另外,如果 rx 是一个编译后的正则对象, rx.search(string, 0, 50) 等价于 rx.search(string[:50], 0)。
Pattern.fullmatch(string[, pos[, endpos]])
如果整个 string 与此正则表达式匹配,则返回相应的 Match。 如果字符串与模式不匹配则返回 None;请注意这与零长度匹配是不同的。
Pattern.finditer(string[, pos[, endpos]])
类似函数 finditer() , 使用了编译后样式,但也可以接收可选参数 pos 和 endpos ,限制搜索范围,就像 search()
Pattern.sub(repl, string, count=0)
等价于 sub() 函数,使用了编译后的样式
Pattern.subn(repl, string, count=0)
等价于 subn() 函数,使用了编译后的样式
Pattern.flags
正则匹配标记。这是可以传递给 compile() 的参数,任何 (?…) 内联标记,隐性标记比如 UNICODE 的结合
Pattern.groups
捕获到的模式串中组的数量。
Pattern.groupindex
映射由 (?P) 定义的命名符号组合和数字组合的字典。如果没有符号组,那字典就是空的
Pattern.pattern
编译对象的原始样式字符串
匹配对象
匹配对象总是有一个布尔值 True。如果没有匹配的话 match() 和 search() 返回 None 所以你可以简单的用 if 语句来判断是否匹配
**
match = re.search(pattern, string)
if match:
process(match)
**
匹配对象总是有一个布尔值 True。如果没有匹配的话 match() 和 search() 返回 None 所以你可以简单的用 if 语句来判断是否匹配
**
由match返回的表达式对象。可用的方法
Match.expand(template)
对 template 进行反斜杠转义替换并且返回,就像 sub() 方法中一样。转义如同 \n 被转换成合适的字符,数字引用(\1, \2)和命名组合(\g<1>, \g) 替换为相应组合的内容。
Match.group([group1, …])
返回一个或者多个匹配的子组。如果只有一个参数,结果就是一个字符串,如果有多个参数,结果就是一个元组(每个参数对应一个项),如果没有参数,组1默认到0(整个匹配都被返回)。 如果一个组N 参数值为 0,相应的返回值就是整个匹配字符串;如果它是一个范围 [1…99],结果就是相应的括号组字符串。如果一个组号是负数,或者大于样式中定义的组数,就引发一个 IndexError 异常。如果一个组包含在样式的一部分,并被匹配多次,就返回最后一个匹配。
Match.getitem(g)
这个等价于 m.group(g)。这允许更方便的引用一个匹配
Match.groups(default=None)
返回一个元组,包含所有匹配的子组,在样式中出现的从1到任意多的组合。 default 参数用于不参与匹配的情况,默认为 None
Match.groupdict(default=None)
返回一个字典,包含了所有的 命名 子组。key就是组名。 default 参数用于不参与匹配的组合;默认为
Match.start([group])
Match.end([group])
返回的是下标
email = "tony@tiremove_thisger.net"
m = re.search("remove_this", email)
email[:m.start()] + email[m.end():]
'tony@tiger.net'
**Match.span([group)返回的是下标的范围。跨度
Match.pos,**返回的是搜索的位置
pos 的值,会传递给 search() 或 match() 的方法 a 正则对象 。这个是正则引擎开始在字符串搜索一个匹配的索引位置。
Match.endpos
endpos 的值,会传递给 search() 或 match() 的方法 a 正则对象 。这个是正则引擎停止在字符串搜索一个匹配的索引位置
a
<re.Match object; span=(7, 18), match='remove_this'>
a.pos
0
a.endpos
25
Match.lastindex
捕获组的最后一个匹配的整数索引值,或者 None 如果没有匹配产生的话。比如,对于字符串 ‘ab’,表达式 (a)b, ((a)(b)), 和 ((ab)) 将得到 lastindex == 1 , 而 (a)(b) 会得到 lastindex == 2
Match.lastgroup
最后一个匹配的命名组名字,或者 None 如果没有产生匹配的话
Match.re
返回产生这个实例的 正则对象 , 这个实例是由 正则对象的 match() 或 search() 方法产生的。
Match.string
传递到 match() 或 search() 的字符串。
a.re
re.compile('remove_this')