然后我们来引入一下贪婪算法与非贪婪算法的一个概念:
贪婪算法:
贪婪匹配(默认的):在整个表达式匹配成功的前提下,尽可能多的匹配
表达方式: .* .+ .? ·······
非贪婪算法:
贪婪匹配:在整个表达式匹配成功的前提下,尽可能少的匹配
表达方式: .* ? .+? .?? ·······
当然我们通过代码也可以看出来
import reHTML = """<HTML> <div><p>九霄龙吟惊天变</p></div> <div><p>风云际会浅水游</p></div></HTML>"""#贪婪匹配pattern = re.compile(‘<div><p>.*</p></div>‘,re.S) #表达式为: .* r_List = pattern.findall(HTML)print(r_List)#非贪婪匹配pattern = re.compile(‘<div><p>.*?</p></div>‘,re.S) #表达式为: .*?r_List = pattern.findall(HTML)print(r_List)
我们可以通过输出结果看出来两者的区别
[‘<div><p>九霄龙吟惊天变</p></div>\n <div><p>风云际会浅水游</p></div>‘] #将 \n换行 空格 全部匹配了下来
[‘<div><p>九霄龙吟惊天变</p></div>‘,‘<div><p>风云际会浅水游</p></div>‘] #只是将 两个div中的内容匹配了下来
可以看出 贪婪算法会在字符串中会找到第一个匹配的元素后就会一直寻找到最后一个匹配的元素 即使中间有重复匹配的元素的元素 非贪婪算法会尽可能的少匹配,即为只要满足就会结束,从而寻找下一组匹配的元素
正则算法子模式的应用
如上代码 如果我想要将 九霄龙吟惊天变 风云际会浅水游 这两句诗单独提取出来 就要单独修改代码
pattern = re.compile(‘<div><p>(.*?)</p></div>‘,re.S) #表达式为: (.*?)r_List = pattern.findall(HTML)print(r_List)
即为:在需要单独提取出来的元素两边加上() 运行结果为:
[‘九霄龙吟惊天变‘,‘风云际会浅水游‘]
下面我们可以进行一些其他的测试 从而更加直观的看到 正则表达式子模式的应用
\w:单次或多次出现的字符 \s:空白字符
s = ‘A B C D‘p1 = re.compile(‘\w+\s+\w+‘)print(p1.findall(s))
结果为:
[‘A B‘,‘C D‘]
s = ‘A B C D‘p1 = re.compile(‘(\w)+\s+\w+‘)print(p1.findall(s))
结果为:
[‘A‘,‘C‘]
s = ‘A B C D‘p1 = re.compile(‘(\w)+\s+(\w+)‘)print(p1.findall(s))
结果为:
[(‘A‘,‘B‘),(‘C‘,‘D‘)]
@H_301_363@ 仅供学习! 2019.10.8 总结
以上是内存溢出为你收集整理的python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用全部内容,希望文章能够帮你解决python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)