参考:
官方文档https://docs.python.org/zh-cn/3.7/library/re.html
怎么用https://docs.python.org/zh-cn/3.7/howto/regex.html#regex-howto
基本梳理和基本例子https://www.cnblogs.com/peng8098/p/python_basis_6.html
实际例子https://itbyc.com/Python/20353.html
经典例子https://blog.csdn.net/Flexin__/article/details/80023191
在线测试工具https://blog.csdn.net/z714405489/article/details/83217567
项目案例:罗攀,蒋仟《从零开始学Python网络爬虫》
https://www.jb51.net/article/170600.htm
正则表达式引擎in python https://www.cnblogs.com/secoding/p/11576864.html(代码https://github.com/dejavudwh/Regex)
不错的讲解:http://www.regexlab.com/zh/regref.htm(注意未必与python的正则表达式规则相同)
学习过程:1. 大概的使用方法,2. 需要的积累查阅,3. 系统的总结沉淀
1. 大概的使用方法
- 常见规则
一般字符:., \, [...]
预定义字符集:\d, \D, \s, \S, \w, \W
数量词:*, +, ?, {m}, {m,n}
边界匹配:^, $, \A, \Z, \b
常见例子:re.S模式下, r‘(.*?)’表示以非贪婪模式匹配任何字符(如果不是re.S模式,则表示除了\n之外的任何字符),返回括号中的模式内容,具体使用见2.中非贪婪模式例子
注意:\w包含数字,字母以及下划线,但是不包括-
例子:
result1 = re.findall(r'\w{2}', '_21-c34d-56_e78')
print(result1) #输出:['_2', 'c3', '4d', '56', '_e', '78']
- 匹配方法
import re
results = re.findall(patt, string, flags)
例子:
result1 = re.findall(r'\d{2}', '21c34d56e78')
print(result1) #输出:['21', '34', '56', '78']
- 替换方法
import re
s="我是(一个人)(中国人)aaa[真的]bbbb{确定}".replace("(", "(").replace(")", ")")
a = re.sub(r"\(.*?\)", "", s)
print(a) #我是aaa[真的]bbbb{确定}
- 分裂方法
2. 需要的积累查阅
- 非贪婪模式 *?
例子:
result3 = re.findall(r'<p>(.*?)</p>', '<p>21c34d56e78</p>abc<p></p>7634', re.S)
print(result3) #输出:['21c34d56e78', '']
3. 系统的总结沉淀