re模块函数概览
- re.compile(pattern, flags=0)
- re.search(pattern, string, flags=0)
- re.match(pattern, string, flags=0)
- re.split(pattern, string, maxsplit=0, flags=0)
- re.findall(pattern, string, flags=0)
- re.finditer(pattern, string, flags=0)
- re.sub(pattern, repl, string, count=0, flags=0)
- re.subn(pattern, repl, string, count=0, flags=0)
- re.escape(string)
- re.purge()
re.compile()
语法:
re.compile(pattern, flags=0)
编译正则表达式,并返回一个 RE
对象。可以使用该对象的 match()
和 search()
方法来匹配字符串。
示例:
prog = re.compile(pattern)
result = prog.match(string)
与下列写法等价:
result = re.match(pattern, string)
表达式被编译成 RE
对象后,可被多次使用。如果是多次使用同一个表达式来匹配字符串的话,那么提前编译表达式可以提高匹配效率,加快匹配速度。
指定 flags
的值可以改变表达式的行为,它的取值将在下面列出。如果要同时指定多个值,可使用位或运算符 |
来分隔。
re.DEBUG
:显示有关表达式编译的调试信息。re.I
re.IGNORECASE
:忽略大小写差别。re.L
re.LOCALE
:特殊字符 \w, \W, \b, \B, \s, \S 将取决于当前环境。re.M
re.MULTILINE
:令字符^
和$
匹配多行(如果存在空行的话)。re.S
re.DOTALL
:令字符.
匹配包括换行符在内的任意字符。re.U
re.UNICODE
:特殊字符 \w, \W, \b, \B, \d, \D, \s, \S 将取决于Unicode字符属性。re.X
re.VERBOSE
:用于编写更易阅读的表达式,自动忽略普通空格。
re.search()
语法:
re.search(pattern, string, flags=0)
仅匹配第一个满足条件的字符串,如果匹配成功则返回一个 MatchObject
对象,否则返回 None
。
re.match()
语法:
re.match(pattern, string, flags=0)
仅匹配字符串的起始位置子串,如果匹配成功则返回一个 MatchObject
对象,否则返回 None
。
注意:即使是在 MULTILINE
模式下,re.match()
也只会匹配整个字符串的起始位置,而不会匹配每一行的起始位置。
如果你想要匹配字符串的任意位置,请使用 search()
方法。
re.split()
语法:
re.split(pattern, string, maxsplit=0, flags=0)
通过匹配表达式来切割字符串。正常情况下,表达式匹配的结果仅用于分割字符串,不会添加到结果列表中。如果表达式带有捕获分组括号,则表达式匹配到的结果也将被添加到结果列表中。
如果指定了 maxsplit
的值,且不为0,那么最多进行 maxsplit
次的字符串切割操作。最后剩下的未被切割的字符串,将作为一个整体添加到结果列表中。这种情况下,结果列表最多会有 maxsplit
+ 1 项。
re.findall()
语法:
re.findall(pattern, string, flags=0)
以列表的形式返回所有不重叠的匹配结果。由于扫描过程是至左向右进行,因此匹配结果在列表中的顺序与扫描到的顺序一致。需要注意的是,空匹配结果同样会被添加到列表中。
如果表达式中含有捕获分组,那么表达式匹配到的结果中,只有捕获分组里的内容会被添加到结果列表中。
例如:
>>> re.findall(r'(\w)\d', 'a1 b2 c3 d4')
['a', 'b', 'c', 'd']
如果表达式含有多个捕获分组,那么对于每一个表达式匹配到的结果,都将以元组的形式添加到列表中。元组中的每个元素,依次对应表达式中的一个捕获分组。
例如:
>>> re.findall(r'(\w)(\d)', 'a1 b2 c3 d4')
[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
re.finditer()
语法:
re.finditer(pattern, string, flags=0)
返回一个迭代器,包含所有不重叠的匹配结果,用于生成 MatchObject
对象。
匹配结果的迭代顺序与从左至右扫描到的顺序一致,空匹配结果同样会被添加到列表中。
re.sub()
语法:
re.sub(pattern, repl, string, count=0, flags=0)
返回一个被替换后的字符串。替换过程:找到字符串中所有与表达式相匹配的结果,每个结果根据给定的 repl
进行替换。
其中:pattern
可以是字符串,或编译后的 RE
对象。repl
可以是字符串,或一个函数。
如果 repl
为字符串,则所有以反斜杠 \
开头的特殊转义字符将会被预先处理。例如: \n
\r
\t
等字符,会被转换为它们对应的换行、回车、制表符。而未知的转义字符,如 \j
则不会被处理。反向引用,例如 \2
,会被替换为匹配结果中的第二个捕获分组的内容。
例如:
>>> text = 'a1 b2 c3'
>>> re.sub(r'(\w)(\d)', r'\2\1', text)
'1a 2b 3c'
如果 repl
为函数,则它会在每一次匹配成功时被调用。函数的参数是一个 MatchObject
对象,返回值是替换后的字符串。
例如:
>>> def foo(matchobj):
... if matchobj.group(0) == '-': return '+'
... else: return '*'
>>> re.sub(r'\D', foo, '1-2/4')
'1+2*4'
可选参数 count
可用于指定最多匹配次数,如果不指定,或指定的值为0,将会替换所有匹配结果。
re.subn()
语法:
re.subn(pattern, repl, string, count=0, flags=0)
与 re.sub()
替换过程相同,不同的是该函数的返回值是一个二元组,包含替换后的字符串和替换操作的次数。
即:(new_string, times_of_subtitution)
re.escape()
语法:
re.escape(string)
返回经过处理后的字符串。处理过程:对于原字符串中除字母和数字以外的所有字符,在其前面添加反斜杠 \
。
当你想要对含有正则表达式特殊符号的字符串进行匹配时,这个函数将会派上用场。
例如:
>>> re.findall(re.escape(r'\1\2'), r'\1\2\3')
['\\1\\2']
re.purge()
语法:
re.purge()
清除正则表达式缓存。
参考文档:re -- Regular expression operations
作者:Wray Zheng
原文:http://www.codebelief.com/article/2017/01/python-standard-library-re-module-functions/