标准库: re
简介
class re.Pattern
是正则表达式对象,存放正则表达式;
re.match
, re.search
等函数表示不同的匹配方式;
class re.Match
是匹配对象,是匹配成功后的结果;
为了方便,Pattern
对象可以调用大部分匹配函数。
特殊字符
TLDR:
- Python 字符串文字支持的大多数转义序列也被正则表达式解析器接受;
字符 | 解释 | 示例 |
---|---|---|
\w |
对于Unicode字符串,表示任意一个字母(不仅英文)数字和下划线,即可以用来组成单词的字符,不包含连字符、标点和其他字符; 对于ASCII字符串,相当于 [a-zA-Z0-9_] 。 |
None == re.match(r'\w', '-') ,None != re.match(r'\w', '_') |
\W |
和\w相反 | |
\b |
表示单词的开头和结尾,即\w字符和\W字符之间的边界,其本身匹配的字符为空。 | 例如r'\bfoo\b' 匹配'foo' ,'foo.' ,'foo baz' ,但不匹配'foobar' , 'foo3' . |
\B |
和\b 相反,表示相邻的字符不在单词的开头或结尾,其本身匹配的字符也为空。 |
r'py\\B' 匹配'python' , 'py3' ,不匹配'py' ,'py .’。 |
标志
re包提供标志来调整正则表达式的设置,所谓标志即为一个枚举类re.RegexFlag
的枚举量。
标志 | 解释 |
---|---|
re.A/re.ASCII | 让特殊字符遵循ASCII码匹配模式 |
re.U/re.UNICODE | python3已默认; |
re.I/re.IGNORECASE | 忽略大小写; |
re.M/re.MULTILINE | 表明字符串包含多行,让'^' 和'$' 匹配每一行的开始和结束。适用于search,不适用于match。 |
re.NOFLAG | 其值为0,即表示默认设置。 |
re.DOTALL | 默认. 不包括换行符,该标志可解除限制。 |
标志可以多个一起使用,通过'|'
连接。
常用函数
re.compile(pattern, flags=0)
将正则表达式字符串转换成正则表达式对象。
re.search(pattern, string, flags=0)
扫描字符串返回首个匹配位置的结果,即Match
对象,或None
.
re.match(pattern, string, flags=0)
仅从首个字符开始匹配,即使re.M模式也是。
re.split(pattern, string, maxsplit=0, flags=0)
用正则表达式来切分字符串。pattern匹配到的字符,作为分割符,maxsplit控制分割符的数量,控制分割次数。
分割符在首尾或两个连续分割符之间会产生一个空字符''
。
当pattern使用括号时,括号的文本也作为最终结果输出。例如:
re.split(r'\W+', 'Words, words, words.')
# ['Words', 'words', 'words', '']
re.split(r'(\W+)', 'Words, words, words.')
# 因为括号捕捉,所以分割符本身也作为结果输出
# ['Words', ', ', 'words', ', ', 'words', '.', '']
re.findall(pattern, string, flags=0)
返回结果字符串列表,如果有多个组(group),返回元组(每个元素是一个group)的列表
re.sub(pattern, repl, string, count=0, flags=0)
返回替换后的字符串结果。
re.escape(pattern)
返回特殊字符的转义形式,以保护和正则表达式元字符冲突的字符。比如想要表示点’.’,其转义形式为’\.’。
Match对象
match对象的布尔值总为True
。
Match.group([group1, …])
单个指定返回。
返回指定group的匹配结果字符串,没有匹配到的group值为None
,一个group被多次匹配,返回最后一次。
Match.__getitem__(g)
等同于m.group(g)
.
Match.groups(default=None)
全部返回。
返回所有group的匹配结果组成的元组,没有匹配到的group返回值为default
。