标签:findall 组合 lis 操作 style 学习 公式 引入 空格
贪婪算法:
贪婪匹配(默认的):在整个表达式匹配成功的前提下,尽可能多的匹配
表达方式: .* .+ .? ·······
非贪婪算法:
贪婪匹配:在整个表达式匹配成功的前提下,尽可能少的匹配
表达方式: .* ? .+? .?? ·······
当然我们通过代码也可以看出来
import re html = """ <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‘)]
仅供学习! 2019.10.8
python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用
标签:findall 组合 lis 操作 style 学习 公式 引入 空格
原文地址:https://www.cnblogs.com/gongdada/p/11638632.html