• python正则表达式贪婪算法与非贪婪算法与正则表达式子模式的简单应用


    先引入一下百度百科对于正则表达式的概念:

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    然后我们来引入一下贪婪算法与非贪婪算法的一个概念:

    贪婪算法:

    贪婪匹配(默认的):在整个表达式匹配成功的前提下,尽可能多的匹配
    表达方式: .* .+ .? ·······

    非贪婪算法:

    贪婪匹配:在整个表达式匹配成功的前提下,尽可能少的匹配 
    表达方式: .* ? .+? .?? ·······

    当然我们通过代码也可以看出来

    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>
        <div><p>风云际会浅水游</p></div>']    #将 
    换行  空格  全部匹配了下来
    [
    '<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

     

     



    
    
    
  • 相关阅读:
    js 常用方法
    Request.UrlReferrer
    批处理定时打开一个网页
    js基础知识总结:函数
    .NET DataTable转换为JSON格式的字符串
    .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
    .NET错误提示之:无法更新EntitySet“TableName”因为它有一个DefiningQuery
    python中安装web.py
    pycharm中运行flask项目安装flask
    jmeter--查看结果数中响应数据部分乱码
  • 原文地址:https://www.cnblogs.com/gongdada/p/11638632.html
Copyright © 2020-2023  润新知