## 正则表达式用于对字符串内容进行匹配和查找,是后续修改、替换、判断等操作的基础
## 基本规则
- 择一匹配:(|), 例如 a|b 表示匹配一个a或者一个b
- 单一任意字符匹配: (.),表示除了换行符(
)之外的任意单一字符,包括大小写字母、数字、空格、可打印字符、不可打印字符等。例如:a.b 可以匹配 aab, a2b, a#b等。如果要匹配 (.),则需要使用反斜线()进行转义 如 .
- 起始匹配:(^),例如 ^abc 可以匹配以abc开头的字符串
- 末尾匹配: ($),例如 .com$ 可以匹配以 .com 结尾的字符串,可以与(^)连用,如:^abc$ 表示任何由单独的字符串 abc 构成的字符串
- 边界匹配:( 或 B), () 和 (B)具有相反意义, 例如: abc 表示任意由abc开头的字符串, abc 表示仅由abc构成的字符串,Babc表示含有abc但是不以abc开头的字符串
- 字符集: ([]),使用中括号表示属于某个字符集的单个字符,例如:[abcd] 可以匹配a, b, c, d中的一个
- 范围限定:([]),通过在字符集中添加内容限定范围,例如:[A-Z][a-z][0-9]分别表示单个大写字母、小写字母和数字
- 范围否定:([^]),前中括号后紧跟一个^表示不含某个范围内的所有字符,例如:[^A-Za-z]表示匹配任意不含字母的字符串
- 频次匹配:({N}),大括号中一个数字表示前面的正则表达式出现N次,例如:[0-9]{11}表示匹配11个数字,[0-9]{10,20}表示匹配10~20个数字
- d与D:(d)匹配单个数字相当于[0-9],(D)匹配单个非数字,相当于[^0-9]
- w与W: w匹配任意单个字母或数字,相当于[A-Za-z0-9], W相当于[^A-Za-z0-9]
- s与S: s是指空白,包括空格、换行、tab缩进等所有的空白,而S刚好相反,这样一正一反下来,就表示所有的字符,完全的,一字不漏的。
- (*) 星号匹配0次或多次前面出现的正则表达式(可以多次,也可以一次都没有)
- (+) 加号匹配1次或多次前面出现的正则表达式(至少有一次)
- (?) 问号匹配0次或一次前面出现的正则表达式(可以有,也可以没有)
- 使用括号分组,例如:d(.d+)? 可以匹配数字,包括2, 2.22 等整数和小数
- 扩展表示:(?), 小括号中紧跟一个问号,问号后更匹配条件,例如:
- (?:...) 非捕获分组
- (?:w+.)* 匹配 abc. python. 等以 . 结尾的字符串
- (?#comment) 正则中的注释,不作匹配
- (?=.com) 如果一个字符串后面跟着 .com 才做匹配操作
- (?!.net) 如果一个字符串后面跟着的不是 .net 才做匹配操作
- (?<=abc) 如果一个字符串前面是 abc 才做匹配操作
- (?<!abc) 如果一个字符串前面不是 abc 才做匹配操作
- (?(1)a|b) 如果一个匹配组 1(1)存在,就与 a 匹配;否则,就与 b 匹配
参考内容:
《Python核心编程(第3版)》 [美] Wesley Chun 著,孙波翔、李斌、李晗 译