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]
View Code

2. 设置匹配边界

^       # 匹配开始边界
$       # 匹配结束边界
View Code

3. 设置重复正则出现的次数

?               0次或1次
*               0次, 1次或多次
+               1次或多次
{n}             n次
{n,}            n次以上
{n,m}           n到m次

# 注意: 当问号紧跟在限制符后面时,匹配模式为非贪婪匹配. 常见: .*?
View Code

4. 常见简化的正则标记

d   # 匹配任一个数字  等价于 [0-9]
s   # 匹配任一个空白字符
w   # 匹配任意一位字母(大小写),数字或下划线    [a-zA-Z0-9_]
.    # 匹配除换行符外的任一字符
View Code

3. 使用总结

1. 常用的匹配模式有: re.S(有换行时用), re.X(支持给复杂正则写注释), re.I(匹配时忽略大小写)

2. 可以对匹配内容进行分组, 同时分组可以取别名. 如: (?P<year>d{4}), 其中?P<year>表示是一个别名

3. 常用的贪婪匹配模式为.*  非贪婪匹配模式为.*?  其中.表示任意以为字符 *表示一个量词 ?表示非贪婪标识符

4. 使用套路: 尽量使用非贪婪匹配模式, 如果字符串有换行需要加上re.S参数, 同时使用小括号把匹配内容进行分组.

4. 遗留问题

问题1: 对于灾难性的回溯问题(如果匹配不成功, 耗时长), 目前还没找到好的解决方案

原文地址:https://www.cnblogs.com/reconova-56/p/13139539.html