• re模块 findall()详解


    1. findall() 函数的2种表示形式

    1 import re
    2 kk = re.compile(r'd+')
    3 kk.findall('one1two2three3four4')
    4 #[1,2,3,4]
    5  
    6 #注意此处findall()的用法,可传两个参数;
    7 kk = re.compile(r'd+')
    8 re.findall(kk,"one123")
    9 #[1,2,3]

    2. 正则表达式可能遇到的坑  --- 正则表达式中的括号()

    1. 当正则表达式中  没有括号时,就是正常匹配,如本例中"/w+/s+/w+"

    在本例中"/w+/s+/w+"第一次匹配到的字符为"2345  3456",由于是贪婪模式会     继续匹配,第二次从"4567"开始匹配匹配到的结果为字符串"4567 5678"

    1 import re
    2 string="2345  3456  4567  5678"
    3 regex=re.compile("w+s+w+")
    4 print(regex.findall(string))
    5 #['2345 3456', '4567 5678']
    6 #补充: 
    7 #s -- 匹配任何不可见字符,包括空格、制表符、换页符等等 
    8 #S -- 匹配任何可见字符 通常[/s/S] -- 可匹配任意字符
    9 #[sS]*? -- 匹配懒惰模式的任意字符

    2. 当正则表达式中有  一个括号时,如"(w+)s+w+"其输出的内容就是括号匹配到的内容

    原理:正则表达式中有一个括号时,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果,但是整个正则表达式执行了,只不过只输出括号匹配到的内容,

    匹配过程:

      1. 第一次匹配时跟上述没有括号时一样,匹配到 "2345  3456" ,只不过只输出(/w+)匹配     到的结果 即"2345",

      2. 第二次匹配同理从"4567" 开始,匹配到"4567  5678",但是,只输出"4567"

    import re
    string="2345  3456  4567  5678"
    regex1=re.compile("(w+)s+w+")
    print(regex1.findall(string))
    #['2345', '4567']

    3. 当正则表达式中有两个括号时,如 "((w+)s+w+)",其输出结果是一个list 中包含2个 tuple

      从输出的结果可以看出,有两个元组,每一个元组中有   两个字符串 :

         其中,第一个元组种的第一个字符串"2345 3456"是最外面的括号输出的结果,第二个字符串是里面括号(/w+)输出的结果 "2345",

           第二个元组是  第二次匹配的结果 -- 详解同第一次匹配。

    import re
    string="2345  3456  4567  5678"
    regex2=re.compile("((w+)s+w+)")
    print(regex2.findall(string))
    #[('2345  3456', '2345'), ('4567  5678', '4567')]

    3. findall() 使用总结:

      第一个 regex 中不带有括号,其输出的内容就是整个表达式所匹配到的内容。

      第二个 regex 中带有1个括号,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果。

      第三个 regex 中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple,---  多个括号就会返回  多个括号分别匹配到的结果 

    正则表达式的特点:

      1. 有括号时只能匹配到括号中的内容,没有括号就正常匹配。

      2. 在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容

     

  • 相关阅读:
    mysql 游标查询
    mysql忘记root密码的解决
    java 两种缓存
    java 实现缓存
    android ndk
    本地计算机上的 MSSQLSERVER 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报”服务 [解决办法]
    选择WEB开发语言
    linux 查看硬件信息
    java 缓存 谈
    程序员相关
  • 原文地址:https://www.cnblogs.com/nbk-zyc/p/11113328.html
Copyright © 2020-2023  润新知