Python模块_re正则表达式模块-2

re模块之转义字符

print(re.findall("I\b","I am a Man")) #匹配不到结果
print(re.findall(r"I\b","I am a Man")) #加字符串前加r的意思是对于特殊字符不作处理的交给re去处理
print(re.findall("I\\\k","I\k am a Man")) #k是没有特殊意义的, 而 \ 在re里是有特殊意义的,所以"I\k am a Man"中的\k其实是\\k
print(re.findall(r"I\\k","I\k am a Man")) #已知re里的 I\k字符 是 I\\k .加r对特殊字符不作处理的交给re去处理

 

re模块之 | (或)

print(re.findall("AB|CD","AAAAAABBBBBBBBBBCCCCCCCCDDDDDD")) #把符合AB和符合CD条件的拿出来,结果是:['AB', 'CD']
print(re.findall("(abc)+","abcabcabc")) #这个结果是:['abc'] ,如何解读?
print(re.findall("(abc)+","abcXabcXabc")) #这个结果是:['abc', 'abc', 'abc'] ,如何解读?
print(re.findall("www.(baidu|163)\.com","www.163.com")) #结果是 ['163'],有 |(或) 会匹配分组条件的内容
print(re.findall("www.(baidu|163)\.com","www.baidu.com")) #结果是 ['baidu']
print(re.findall("www.(?:baidu|163)\.com","www.baidu.com")) #结果是:['www.baidu.com']

 

re模块之search方法

search和findall的区别是:search是最小匹配,findall是贪婪匹配

print(re.search("ABC","123456ABC")) #结果返回是一个对象:<re.Match object; span=(6, 9), match='ABC'>
print(re.search("ABC","123456ABC").group()) #对象的group()方法的结果返回的是一个字符串:ABC
print(re.search("(?P<num>[0-9])[A-Z]+","123ABC456JJJ").group())# 结果是:3ABC
print(re.search("(?P<num>[0-9])[A-Z]+","123ABC456JJJ").group("num")) #结果是:3 ,符合预期

 

re模块之split方法 (分割)

print(re.split("[34]","A3B4CDE3FG4H3")) #结果是:['A', 'B', 'CDE', 'FG', 'H', ''],最后为什么是 空,因为3的前面已经算是被4分了,后面也没东西了,所以是 空
print(re.split("[34]","A34CDE3FG4H3")) #结果是:['A', '', 'CDE', 'FG', 'H', ''],第二个匹配结果为什么是 空,因为 3的后面是4,4也是分割条件一个,所以3后面没东西了,就空了,强行解释?

 

re模块之sub,subn方法 (相当于replace替换)

print(re.sub("\d","AK47","12345")) #结果是:AK47AK47AK47AK47AK47,,有5个ak47,意思就是每匹配到符合要求的单个字符,就会替换
print(re.sub("\d+","AK47","12www1")) #结果是:AK47wwwAK47,有2个AK47,因为12算符合\d+ 的第一个条件,所以算一个替换结果
print(re.sub("\d+","AK47","12www1",1)) #结果是:AK47www1 ,最后一个没去替换,应该我最后一个参数1,表示只替换一次符合要求的结果
print(re.subn("\d","AK47","12www321")) #结果是:元组('AK47AK47wwwAK47AK47AK47', 5),5的意思是符合条件的有5个

 

re模块之compile方法

no_num = re.compile("\D+")  # 先把规则编译到一个对象
result11 = no_num.sub("---","ABC123ABC")
print(result11)

 

re模块之finditer方法

iter_ret = re.finditer("\d","1234567812345678123456781234567812345678") #当处理的数据量很大的时候,就要用到迭代器,以免内存撑爆了
print(next(iter_ret).group())
print(next(iter_ret).group())
print(next(iter_ret).group())

 

posted on 2019-07-28 23:59  詹生  阅读(206)  评论(0编辑  收藏  举报

导航