python学习--re模块
python内置模块, 利用一些特殊符号来方便处理字符串的操作
1. python中re模块的常用方法
1. match方法: 从头扫描字符串, 并返回第一个成功的匹配. (不太常用, 一般会用search方法替代)
2. search方法: 扫描整个字符串, 并返回第一个成功的匹配.
3. findall方法: 扫描整个字符串, 并返回所有成功的匹配. (如果匹配表达式中有多个分组, 则返回结果是List[tuple])
4. sub方法: 实现字符串的替换. (对于复杂的字符串, 可以先用sub删除干扰内容, 再用search或findall匹配所需内容)
2. python中re模块的常用正则匹配符号
1. 匹配字符集中的任一个字符
[abc] [^abc] [a-zA-Z] [0-9]
2. 设置匹配边界
^ # 匹配开始边界 $ # 匹配结束边界
3. 设置重复正则出现的次数
? 0次或1次 * 0次, 1次或多次 + 1次或多次 {n} n次 {n,} n次以上 {n,m} n到m次 # 注意: 当问号紧跟在限制符后面时,匹配模式为非贪婪匹配. 常见: .*?
4. 常见简化的正则标记
\d # 匹配任一个数字 等价于 [0-9] \s # 匹配任一个空白字符 \w # 匹配任意一位字母(大小写),数字或下划线 [a-zA-Z0-9_] . # 匹配除换行符外的任一字符
3. 使用总结
1. 常用的匹配模式有: re.S(有换行时用), re.X(支持给复杂正则写注释), re.I(匹配时忽略大小写)
2. 可以对匹配内容进行分组, 同时分组可以取别名. 如: (?P<year>\d{4}), 其中?P<year>表示是一个别名
3. 常用的贪婪匹配模式为.* 非贪婪匹配模式为.*? 其中.表示任意以为字符 *表示一个量词 ?表示非贪婪标识符
4. 使用套路: 尽量使用非贪婪匹配模式, 如果字符串有换行需要加上re.S参数, 同时使用小括号把匹配内容进行分组.
4. 遗留问题
问题1: 对于灾难性的回溯问题(如果匹配不成功, 耗时长), 目前还没找到好的解决方案