正则表达式(下)

时间:2022-11-27 18:46:48

4.  注意问题

例如:匹配163邮箱

@163.com     中有个点     如果跟正则表达式中的限制符号冲突了  为了让正则识别我的点就是普通的点而不是

限制符号     使用    转义符号:  \              写成@163\.com


比如要匹配的内容有,如果你在正则中写 \,会被识别成转义符号

这时候就要写 \\  可以理解成  第一个\是转义符号   第二个\就是它本身


重点      r选项:








python默认贪婪:根据正则表达式尽量多匹配数据

使用非贪婪:用?(匹配1次就够了)  *, +, ?, {m,n} 等范围表达式后面 .jpg

告诉它匹配的时候到第一次见到.jpg就结束吧,不用往后再找了


5.匹配分组

#  | 匹配左右任意一个表达式

# (163 | qq | kanzhun) 将括号中字符作为一个分组       变量.group1)获取的是163     变量.group2)获取的是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看得到的数据类型