1.常用函数
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.sub(pattern, repl, string, count=0, flags=0)
2.正则表达式匹配规则
2.1单字符串匹配规则
字符 | 功能 |
---|
. | 匹配任意1个字符(除了\n) |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,也就是0-9 |
\D | 匹配非数字,也就是匹配不是数字的字符 |
\s | 匹配空白符,也就是 空格\tab |
\S | 匹配非空白符,\s取反 |
\w | 匹配单词字符, a-z, A-Z, 0-9, _ |
\W | 匹配非单词字符, \w取反 |
2.2数量匹配规则
字符 | 功能 |
---|
* | 匹配前一个字符出现0次多次或者无限次,可有可无,可多可少 |
+ | 匹配前一个字符出现1次多次或则无限次,直到出现一次 |
? | 匹配前一个字符出现1次或者0次,要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{m,n} | 匹配前一个字符出现m到n次 |
2.3边界匹配规则
字符 | 功能 |
---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配一个单词的边界 |
\B | 匹配非单词边界 |
2.4分组匹配规则
字符 | 功能 |
---|
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
2.5汉字匹配规则
Unicode 编码中汉字编码的范围在 \u4e00 到 \u9fa5之间
[\u4e00-\u9fa5]
匹配任意汉字[\u5f20\u4e09]
匹配张三
unicode中文互转
2.6前后界定和前后非界定
(?=pattern)
零宽正向先行断言(zero-width positive lookahead assertion) :代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。(?!pattern)
零宽负向先行断言(zero-width negative lookahead assertion) :代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。(?<=pattern)
零宽正向后行断言(zero-width positive lookbehind assertion) :代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配pattern。(?<!pattern)
零宽负向后行断言(zero-width negative lookbehind assertion) :代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配pattern。
r'(?<![A-Z.\d:])[A-Z\d]\d?\s?\.(?![\dA-Z])'
表示序号,前后均有非界定
贪婪模式和非贪婪模式
- 贪婪模式:总是尝试匹配尽可能多的字符;Python里数量词默认是贪婪的
- 非贪婪模式:总是尝试匹配尽可能少的字符,使用 ? 后缀可以将量词从贪婪模式切换为非贪婪模式。如*? 表示非贪婪的零次或多次匹配,而 +? 表示非贪婪的一次或多次匹配。
可参考博客
re(正则表达式)详细总结