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

  • 相关阅读:
    20个命令行工具监控 Linux 系统性能【转载】
    机器学习及部分NLP相关网上的代码资源整理
    职场中脱颖而出的成长秘诀【转载】
    美好的诗词
    其实这是一种生活方式【转载】
    10个非常有趣的Linux命令【转载】
    如何摆脱工具类【转载】
    在线公开课 | 如何基于模型训练平台快速打造AI能力?
    企业应用架构演化探讨:从微服务到Service Mesh
    生命的价值——大型科技公司的时间“减”史
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9183937.html
Copyright © 2011-2022 走看看