正则表达式一直是计算机领域经久不衰的话题,说简单也简单,简单在语法,内容不多30分钟足以入门;说难也难,难在变化,一个复杂正则的理解和一个复杂问题的简单正则实现,都是颇为考验人的。
准备写两篇文章记录对正则的学习,一篇记录基础语法(看起来超简单),一篇记录诸多细节问题(其实远没有那么简单)
不同语言对正则的实现有些微差异,本文参考python实现
Python语言本身不支持正则表达式,依赖re模块
这句话意味着你用原生string的replace()\split()函数都是无法用正则的
Python常用匹配模式
| 语法 | 说明 | 示例 | 
|---|---|---|
| . | 匹配换行符\n以外的所有字符 | b.c 匹配 bac 或 bdc | 
| * | 匹配一个字符0次或多次 | b*c 匹配 c 或 bbbc | 
| + | 匹配一个字符1次或多次 | b+c 匹配 bc 或 bbbc | 
| ? | 匹配一个字符0次或1次 | b?c 匹配 c 或者 bc | 
| {m} | 匹配前一个字符 m 次 | b{2}c 匹配 bbc | 
| {m,n} | 匹配前一个字符 m 至 n 次 | b{2,5}c 匹配 bbc 或者 bbbbc | 
| [abc] | 匹配 [] 内的任意字符 | [bc] 匹配 b 或者 c | 
| \d | 匹配数字 [0-9] | b\dc 匹配 b1c 等 | 
| \D | 匹配非数字,等价于 [^\d] | b\Dc 匹配 bAc | 
| \s | 匹配空白字符 | b\sc 匹配 b c | 
| \S | 匹配非空白字符,等价于[^s] | b\Sc 匹配 bac | 
| \w | 匹配 [A-Za-z0-9_] | b\wc 匹配 bAc 等 | 
| \W | 等价于 [^\w] | b\Wc 匹配 b c | 
| \ | 转义字符 | b\c 匹配 b\c | 
| ^ | 匹配字符串开头 | bc 匹配句首的 bc | 
| $ | 匹配字符串末尾 | bc$ 匹配以 bc 结尾的字符串 | 
| \A | 仅匹配字符串开头 | \Abc 匹配字符串开头的 bc | 
| \Z | 仅仅匹配字符串末尾 | bc\Z 匹配字符串末尾的 bc |