4. 注意问题
例如:匹配163邮箱
@163.com 中有个点 如果跟正则表达式中的限制符号冲突了 为了让正则识别我的点就是普通的点而不是
限制符号 使用 转义符号: \ 写成@163\.com
比如要匹配的内容有 \ ,如果你在正则中写 \,会被识别成转义符号
这时候就要写 \\ 可以理解成 第一个\是转义符号 第二个\就是它本身
重点 r选项:
python默认贪婪:根据正则表达式尽量多匹配数据
使用非贪婪:用?(匹配1次就够了) *, +, ?, {m,n} 等范围表达式后面 ?.jpg
告诉它匹配的时候到第一次见到.jpg就结束吧,不用往后再找了
5.匹配分组
# | 匹配左右任意一个表达式
# (163 | qq | kanzhun) 将括号中字符作为一个分组 变量.group(1)获取的是163 变量.group(2)获取的是qq
# \num 引用分组num匹配到的字符串
看到能认识
# (?P<name>) 分组起别名 (放在正则最前边)
# (?P=name) 引用起名的分组
banana | apple
\num 表示引用分组(为了使用和前边出现的相同的东西,先把前边变成分组,就是加括号,然后用\num的格式,num告诉程序用前边的哪一个,这个\和re中的转义符号有冲突了,所以有个功能在最前边加个r来表示简略,我的\不是转义符号,建议写正则的时候都写上r,比较保险)
例如:<html>hh</html1>
r”<([a-zA-Z0-9]+)>.*</\1>" 1. 如果没有最前边的r选项,后边写成”<([a-zA-Z0-9]+)>.*</\\1>” \\1才能保证\num格式
2.把[a-zA-Z0-9]+写进分组里,加()才能用\num的引用分组
3.1表示后边的内容,引用的1号位的分组,内容[a-zA-Z0-9]+,保证前后一致
<html><h1>www.itcast.cn</h1></html>
r’<([a-zA-Z0-9]+)><([a-z]?[1-9]?)>www.itcast.cn</\2></\1>
6.re模块高级方法
替换match
1.search 只搜索一次 re.search(‘正则’ ,’搜索内容’) 根据正则只搜索一次,符合条件的找到了不再继续往下搜
re.search(“\d+", "水果有: 香蕉,苹果,鸭梨,桃子 共2022131个,还不知道这20个水果你喜欢吗”)
搜索结果是2022131
2.findall 搜索多次,所有 返回列表
3.sub 替换 re.sub(’根据正则’ , ‘把这个内容’, ‘替换进去(给的目标)’)
re.sub("\d+","200", “阅读数:10") 结果:阅读数:200
4.split 分割 re.split(’,|:’ ,’哈哈:呵呵,嘿嘿,吼吼:嘻嘻’)
注意点:把match换了 结果的时候是用不用group看得到的数据类型