zoukankan      html  css  js  c++  java
  • python re模块findall()详解

    今天写代码,在写到郑泽的时候遇到了一个坑,这个坑是re模块下的findall()函数。

    下面我将结合代码,记录一下

    import re
    
    string="abcdefg  acbdgef  abcdgfe  cadbgfe"
    
    #带括号与不带括号的区别
    #不带括号
    regex=re.compile("((w+)s+w+)")
    print(regex.findall(string))
    #输出:[('abcdefg  acbdgef', 'abcdefg'), ('abcdgfe  cadbgfe', 'abcdgfe')]
    
    regex1=re.compile("(w+)s+w+")
    print(regex1.findall(string))
    #输出:['abcdefg', 'abcdgfe']
    
    regex2=re.compile("w+s+w+")
    print(regex2.findall(string))
    #输出:['abcdefg  acbdgef', 'abcdgfe  cadbgfe']

    第一个 regex 中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple 

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

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

    无括号:字母或数字或下划线+空白+字母或数字或下划线+,所以分成了俩组
    一个括号:在无括号的基础上,匹配 字母或数字或下划线(后面是字母或数字或下划线+)
    俩个括号:在无括号的基础上,先分俩组,再在里面括号基础上查到第二组内容,整体分组组成元组,放到列表中

    结论:findall()返回的是括号所匹配到的结果(如regex1),多个括号就会返回多个括号分别匹配到的结果(如regex),如果没有括号就返回就返回整条语句所匹配到的结果(如regex2)。所以在提取数据的时候就需要注意这个坑。

       实际上是由其并不是python特有的,这是 正则 所特有的 , 任何一门高级语言使用正则都满足这个特点:有括号时只能匹配到括号中的内容,没有括号【相当于在最外层增加了一个括号】。在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容

  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9183937.html
Copyright © 2011-2022 走看看