Python提供re模块实现对正则表达式的支持
字符 | 匹配规则 | abc | abc |
. | 匹配任意换行符“\n”以外的字符, 在DOALL模式中也能匹配换行符。 | a.c | abc |
\ | 转义字符 | a\\c a\.c | a\c a.c |
[...] | 字符集。字符集中的字符可以逐个列出,也可以给出范围。如[abc]或[a-c],第一个字符如果是^则表示取反,如[^abc]表示不是abc的其他字符 | a[bcd]e | abe ace ade |
\d | 数字 [0-9] | a\dc | a1c |
\D | 非数字:[^\d] | a\Dc | abc |
\s | 非空字符:[<空格>\t\r\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 单词字符:[A-Z,a-z,0-9] | a\wc | abc |
\W | 非单词字符:[^\w] | a\Wc | a c |
* | 匹配前一个字符0次或无数次 | abc* | ab abccc |
+ | 匹配前一个字符1次或无限次 | abc+ | abc abccc |
? | 匹配前一个字符0次或1次 | ab? | ab abc |
{m} | 匹配前一个字符m次 | ab[2]c | abbc |
{m,n} | 匹配前一个字符m次至n次,m和n可以省略 | ab{1,2}c | abc abbc |
| | 代表左右表达式只匹配一次,总是先匹配左边的表达式,一旦成功会跳过右边的表达式 | abc|def | abc def |
(...) | 被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的左括号,编号+1 分组表达式作为一个整体,可以在后面接数量词,表达式中 | 仅在该组中有效 | (abc){2} a(123|456)c | abcabc a456c |
贪婪模式和非贪婪模式
正则表达式通常用于文本中查找匹配的字符串。Python里的数量词默认是贪婪的,意思是总是尝试匹配尽可能多的字符;非贪婪模式则相反,总是尝试匹配尽可能少的字符。
例:
正则表达式"ab*",如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪方法"ab*?",将找到"a"。