Skip to content

正则表达式

Python中使用re模块来处理正则表达式。

元字符

1)元字符

元字符匹配内容
.匹配任意字符,除了换行符
\w匹配非单词字符
\s匹配空白字符,包括空格、制表符、换页符等
\d匹配数字字符
\n匹配一个换行符
\t匹配一个制表符
\b匹配一个单词的边界
\W匹配非单词字符
\S匹配非空白字符
\D匹配非数字字符
^匹配字符串的开始
$匹配字符串的结束
a|b匹配a或b
[...]匹配 [...] 中的字符
[^...]匹配不在 [...] 中的字符
()分组使用,匹配括号中的内容

2)量词

量词解释
*匹配0个或多个前面的那一项
+匹配1个或多个前面的那一项
?匹配0个或1个前面的那一项
{n}匹配重复 n 个前面的那一项
{n,}匹配至少 n 个前面的那一项
{n,m}匹配 n 到 m 个前面的那一项
  1. 字符组

有时也会出现各种字符组成的字符组,这在正则表达式中使用[]表示,如下所示:

字符组解释
[0-9]匹配数字字符
[a-z]匹配小写字母
[A-Z]匹配大写字母
[a-zA-Z]匹配大小写字母
[a-zA-Z0-9]匹配大小写字母和数字字符
[0-9a-fA-F]用来验证16位十六进制数

4)修饰符

修饰符解释
i使匹配对大小写不敏感
L使匹配对 Unicode 字符集不敏感
m多行匹配,影响 ^ 和 $
s使 . 匹配包括换行在内的所有字符
x忽略空白字符和 # 开始的注释
g全局匹配,查找所有匹配的字符串,而不仅仅是第一个

贪婪和非贪婪

正则表达式默认为贪婪匹配,也就是尽可能多的向后匹配字符,比如 {n,m} 表示匹配前面的内容出现 n 到 m 次(n 小于 m),在贪婪模式下,首先以匹配 m 次为目标,而在非贪婪模式是尽可能少的向后匹配内容,也就是说匹配 n 次即可。

贪婪模式转换为非贪婪模式的方法很简单,在元字符后添加“?”即可实现,如下所示:

贪婪模式非贪婪模式
**?
++?
???
{n}{n}?
{n,}{n,}?
{n,m}{n,m}?

转义

在正则表达式中,如果要匹配元字符,需要使用转义字符,比如要匹配一个圆点,需要使用\.,因为圆点是元字符。

常见转义字符:* + ? ^ $ [] () {} | \ .