• Learning Python 008 正则表达式-002 findall()方法


    Python 正则表达式 — findall()方法

    重点 findall()方法的使用 — 程序讲解

    简单的符号的使用

    正则表达式的库文件是re,先导入库文件:

    import re

    .的使用举例

    # -?- coding: utf-8 -?-
    import re
    
    a = 'abca123'
    b = re.findall('a.', a)
    print(b)

    输出

    ['ab', 'a1']

    .是一个占位符,我们将程序改成下面这个样子,再试试看:

    # -?- coding: utf-8 -?-
    import re
    
    a = 'abca123'
    b = re.findall('a..', a)
    print(b)

    输出

    ['abc', 'a12']

    所以,几个.,就表示会面保留几位。

    *的使用举例

    # -?- coding: utf-8 -?-
    import re
    
    a = 'abca123'
    b = re.findall('a*', a)
    print(b)

    运行

    ['a', '', '', 'a', '', '', '', '']

    ?的使用举例

    # -?- coding: utf-8 -?-
    import re
    
    a = 'abca123'
    b = re.findall('a?', a)
    print(b)

    运行

    ['a', '', '', 'a', '', '', '', '']

    组合的符号的使用

    .*的使用举例

    # -?- coding: utf-8 -?-
    import re
    
    secret_code = 'sdajksdhfakjldooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoosjdlsjl'
    
    b = re.findall('ooxx.*xxoo', secret_code )
    print(b)

    运行

    ['ooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoo']

    .*得到最多的匹配结果。我先解释一下上面为什么会得到这样的结果。程序将第一个ooxx和最后一个xxoo视为一组ooxx.*xxoo.*使用贪心算法,能找多少找多少,只要能满足条件,反正就是越多越好。

    .*?的使用举例

    # -?- coding: utf-8 -?-
    import re
    
    secret_code = 'sdajksdhfakjldooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoosjdlsjl'
    
    b = re.findall('ooxx.*?xxoo', secret_code )
    print(b)

    运行

    ['ooxxIxxoo', 'ooxxamxxoo', 'ooxxAoboxxoo', 'ooxxSirxxoo']

    .*?使用非贪心算法,和上面.*形成对比。

    ()的使用举例

    # -?- coding: utf-8 -?-
    import re
    
    secret_code = 'sdajksdhfakjldooxxIxxoosdsdsdmknmdsdooxxamxxoodsddjksdjooxxAoboxxoodsddsddkjlooxxSirxxoosjdlsjl'
    
    b = re.findall('ooxx(.*?)xxoo', secret_code )
    print(b)

    运行

    ['I', 'am', 'Aobo', 'Sir']

    当我们需要的内容,我们就使用()给括上。

    我先来讲一个关于 换行符的正则表达式的知识点:

    # -?- coding: utf-8 -?-
    import re
    
    secret_code = '''sdajksdhdlsjlooxxhello
    xxoodsdsdooxxworldxxoodfsdf''
    
    b = re.findall('ooxx(.*?)xxoo', secret_code )
    print(b)

    运行

    ['world']

    我们希望得到的结果是['hello', 'world']
    代码应该这样改:

    # -?- coding: utf-8 -?-
    import re
    
    secret_code = '''sdajksdhdlsjlooxxhello
    xxoodsdsdooxxworldxxoodfsdf''
    
    b = re.findall('ooxx(.*?)xxoo', secret_code, re.S )
    print(b)

    运行

    ['hello
    ', 'world']

    再来看看下面这个:

    # -?- coding: utf-8 -?-
    import re
    
    secret_code = 'dsdxx1xxdsdfxx2xxdfsdxx3xxdlrelxx4xxeuwuxx5xxnjkjh'
    
    b = re.findall('xx(.*?)xxdsdfxx(.*?)xx', secret_code )
    print(b)
    print(b[0][0])

    运行

    [('1', '2')]
    1

    看到没有,找到的结果是列表[])里面包着元组())。如果你想单独打印'1'这个结果,你需要这样指定:b[0][0]


    参考网站:
    http://www.jikexueyuan.com/course/777_2.html?ss=1

  • 相关阅读:
    linux 操作命令
    Linux 安装问题
    margin和text-align实现水平居中的区别
    javascript关键字typeof、instanceof、constructor判断类型
    jquery经常用到的代码段
    Ubuntu安装Chrome浏览器及解决启动no-sandbox问题
    github基本使用---从零开始
    Jquery的load加载本地文件出现跨域错误的解决方案
    meta标签中设置以极速模式打开网页
    原生js动态创建文本内容的几种方式
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928643.html
Copyright © 2020-2023  润新知