zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928643.html
Copyright © 2011-2022 走看看