python正则表达式
常用正则表达式操作符
| 操作符 | 说明 | 实例 |
|---|---|---|
| . | 表示任何单个字符 | |
| [] | 字符集,对单个字符给出取值范围 | [abc]表示a、b、c,[a-z]表示a到z的单个字符 |
| [^] | 非字符集,对单个字符给出排除范围 | [^abc]表示非a或b或c的单个字符 |
| * | 前一个字符的0次或无穷次扩展 | abc*表示ab、abc、abcc、abccc等 |
| + | 前一个字符的1次或无限次扩展 | abc+表示abc、abcc、abccc等 |
| ? | 前一个字符的0次或1次扩展 | abc?表示ab、abc |
| | | 左右表达式各一个 | abc|def表示abc、def |
| {m} | 扩展前一个字符m次 | ab{2}c表示abbc |
| {m,n} | 扩展前一个字符m至n次(含n) | ab{1,2}c表示abc、abbc |
| ^ | 匹配字符串开头 | ^abc表示abc且在一个字符串的开头 |
| $ | 匹配字符串结尾 | abc$表示abc且在一个字符串的结尾 |
| () | 分组标记,内部只能使用|操作符 | (abc)表示abc,(abcldef)表示abc、def |
| \d | 数字,等价于[0-9] | |
| \w | 单词字符,等价于[A-Za-z0-9_] |
经典正则表达式实例
匹配首尾空白字符的正则表达式:^s*|s*$ 匹配Email地址的正则表达式:w+([-+.]w+)@w+([-.]w+).w+([-.]w+)* 匹配网址URL的正则表达式:[a-zA-z]+://[^s]*
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}, 从五位数开始匹配,也就是 10000 匹配中国邮政编码:[1-9]d{5}(?!d), 中国邮政编码为6位数字 匹配身份证:d{15}|d{18},评注:中国的身份证为15位或18位 匹配ip地址:d+.d+.d+.d+, 评注:提取ip地址时有用
贪婪模式与非贪婪模式
贪婪模式(Greedy)
在正则中,表示次数的量词默认是贪婪的,在贪婪模式下,会尝试尽可能最大长度去匹配
字符串 aaabb 中使用正则 a* 的匹配过程


分析
a* 在匹配开头的 a 时,会尽量匹配更多的 a,直到第一个 b 不满足要求为止,匹配上三个 a,后面每次匹配时都得到空字符串
非贪婪匹配(Lazy)
如何从贪婪模式变成非贪婪模式呢
在量词后面加上 ? ,正则就变成了 a*?
