参考《Core PYTHON Applications Programming Third Edition》
1. 符号和字符
正则表达式在各语言中基本语法是相同,不同的语言可能会有一些高级特性,而这些高级特性及语法可能有些区别。
记号 | 描述 | 示例表达式 |
Symbols | ||
literal | 匹配字符串 | foo |
re1|re2 | 匹配正则表达式re1或re2 | foo|bar |
. | 匹配任意字符串(除了“\n”) | b.b |
^ | 匹配字符串开头 | ^Dear |
$ | 匹配字符串结尾 | /bin/*sh$ |
* | 匹配0个以上前一个正则表达式或字符 | [A-Za-z0-9]* |
+ | 匹配1个以上前一个正则表达式或字符 | [a-z]+\.com |
? | 匹配0个或1个前一个正则表达式或字符 | goo? |
{N} | 匹配N个前一个正则表达式或字符 | [0-9]{3} |
{M,N} | 匹配M~N个前一个正则表达式或字符 | [0-9]{5,9} |
[...] | 匹配字符组中任意单个字符 | [aeiou] |
[..x-y..] | 匹配x-y的范围里的任意单个字符 | [0-9],[A-Za-z] |
[^...] | 不匹配字符组中任意字符 | [^aeiou],[^A-Za-z0-9_] |
(*|+|?|{})? | 使用“非贪婪”版的以上重复匹配的符号(*, +, ?, {}) | .*?[a-z] |
(...) | 匹配括号中正则表达式并另存为subgroup | ([0-9]{3})?,f(oo|u)bar |
Special Characters | ||
\d | 匹配任意十进制数字,和[0-9]一样,\D则反之 | data\d+.txt |
\w | 匹配任意字母数字字符,和[A-Za-z0-9_]一样,\W则反之 | [A-Za-z_]\w+ |
\s | 匹配空白字符,和[ \n\t\r\v\f]一样,\S则反之 | of\sthe |
\b | 匹配热议字符边界,\B反之 | \bThe\b |
\N | 匹配已保存的subgroup N(看上面的(...)) | price: \16 |
\c | 逐字匹配任意特殊字符c (也就是去掉字符的特殊含义,按字面匹配) | \., \\, \* |
\A (\Z) | 匹配哦字符的开始(结尾)(和 ^ $一样) | \ADear |
Extension Notation | ||
(?iLmsux) | 在正则表达式中嵌入一个或多个特殊“标志”参数(相对于通过function/method) | (?x), (?im) |
(?:...) | 表示一个组匹配后不保存用来检索或使用 | (?:\w+\.)* |
(?P<name>...) | 类似于正则群只匹配与名字一致,而不是数字ID | (?P<data>) |
(?P=name) | 匹配先前(?P<name>)分组的相同字符串 | (?P=data) |
(?#...) | 指定注释,所有内容都忽略掉 | (?#comment) |
(?=...) | 如果字符串后面出现...,则成功,匹配操作不消耗字符串;称之为前向肯定断言 | (?=.com) |
(?!...) | 如果字符串后面没有...,则成功;称之为前向否定断言 | (?!.net) |
(?<=...) | 如果...在当前匹配点前出现,则成功; 称之为后向肯定断言 | (?<=800-) |
(?<!...) | 如果...没有在当前匹配点钱出现,则成功;称之为后向否定断言 | (?<!192\.168\.) |
(?(id/name)Y|N) | 如果group和给定的id或name存在,则有条件的匹配正则表达式Y,其他就是N,N可选。 | (?(1)y|x |
括号分组
主要作用:正则表达式分组、匹配子组。
\d+(\.\d*)? 表示简单简单的浮点数字,及任意十进制数字,后面跟一个可选的小数点,如“0.004,” “2,” “75.,”。
(Mr?s?\. )?[A-Z] [a-z]* [ A-Za-z-]+ 名字姓氏,名字首字母不许大写,全名前可选称谓,如:“Mr.,” “Mrs.,” “Ms.,” 或“M.,”。
扩展符号
这里说下以问号开头的扩展符号(? . . . ),(?P<name>)表示一组匹配值。
(?:\w+\.)* 以点号结尾,如