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

  • 相关阅读:
    服务器的计时器的Interval最大能设置为多大?
    IE页面嵌入复杂WinForm控件不能正常激活
    自动升级组件居然把我那提供升级的站点目录整个删除了!
    自动升级失败,缺少System.resources.dll?
    字频分析结果出来了
    原来是2003 Server的问题
    一直这么渴望执着不一定能成功,只是活着就是执着
    模拟生态系统自己编写"生命"
    微软的Soap样例是错误的!
    对哈希表进行排序
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928643.html
Copyright © 2011-2022 走看看