资讯专栏INFORMATION COLUMN

Python正则表达re模块findall()函数详解

89542767 / 293人阅读

  小编写这篇文章的主要目的,主要是给大家做一个解答,解答关于Python正则表达内容的一些相关介绍,正则表达式当中,主要是涉及到re模块方面的一些介绍,还有就是关于findall()函数的一些例子,那么,具体内容是什么呢?下面就给大家详细解答下。


  一、re.findall函数介绍


  它在re.py中有定义:


  def findall(pattern,string,flags=0):
  """Return a list of all non-overlapping matches in the string.
  If one or more capturing groups are present in the pattern,return
  a list of groups;this will be a list of tuples if the pattern
  has more than one group.
  Empty matches are included in the result."""
  return _compile(pattern,flags).findall(string)


  返回string中所有与pattern匹配的全部字符串,返回形式为数组。


  findall()函数的两种表示形式


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


  二、实例代码


  后面会讲解代码里的各个部分,先列出来~


  import re
  str='aabbabaabbaa'
  #一个"."就是匹配除\n(换行符)以外的任意一个字符
  print(re.findall(r'a.b',str))#['aab','aab']
  #*前面的字符出现0次或以上
  print(re.findall(r'a*b',str))#['aab','b','ab','aab','b']
  #贪婪,匹配从.*前面为开始到后面为结束的所有内容
  print(re.findall(r'a.*b',str))#['aabbabaabb']
  #非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
  print(re.findall(r'a.*?b',str))#['aab','ab','aab']
  #非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
  print(re.findall(r'a(.*?)b',str))#['a','','a']
  str='''aabbab
  aabbaa
  bb'''#后面多加了2个b
  #没有把最后一个换行的aab算进来
  print(re.findall(r'a.*?b',str))#['aab','ab','aab']
  #re.S不会对\n进行中断
  print(re.findall(r'a.*?b',str,re.S))#['aab','ab','aab','aa\n b']


  三、re.findall中正则表达式(.*?)


  字符串是

  str='aabbabaabbaa'


  1.符号.就是匹配除\n(换行符)以外的任意一个字符


  print(re.findall(r'a.b',str))
  #['aab','aab']


  2.符号*前面的字符出现0次或以上


  print(re.findall(r'a*b',str))
  #['aab','b','ab','aab','b']


  3.符号.*贪婪,匹配从.*前面为开始到后面为结束的所有内容


  print(re.findall(r'a.*b',str))
  #['aabbabaabb']


  4.符号.*?非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取


  print(re.findall(r'a.*?b',str))
  #['aab','ab','aab']


  5.符号(.*?)非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容


 print(re.findall(r'a(.*?)b',str))
  #['a','','a']
  关于带括号与不带括号的区别
  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中不带括号,其输出的内容就是整个表达式所匹配到的内容。


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


  四、re.findall中参数re.S的意义


  1.字符串变为(后面多加了2个b)


  str='''aabbab
  aabbaa
  bb'''


  2.参数无re.S,没有把最后一个换行的aab算进来


  print(re.findall(r'a.*?b',str))
  #['aab','ab','aab']


  3.参数有re.S,不会对\n进行中断


  print(re.findall(r'a.*?b',str,re.S))
  #['aab','ab','aab','aa\n b']


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来更多帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128249.html

相关文章

  •  Python正则表达re.compile()和re.findall()详解

      小编写这篇文章的主要目的,主要是给大家做出一个解答,主要是用来解答Python正则表达式的内容,包括re.compile()和re.findall(),两种常见类型代码的解释,关于这两方面的内容,下面给大家详细的做个介绍。  前言  在使用爬虫提取网页中的部分信息时,采用到了re.compile()与re.findall()两种方法,目的:把网页中的某某城市土地规划表截取并打印出来.  网页中...

    89542767 评论0 收藏0
  • Python正则表达式保姆式教学,带你精通大名鼎鼎的正则

    摘要:今天来给大家分享一份关于比较详细的正则表达式宝典,学会之后你将对正则表达式达到精通的状态。正则表达式是用在方法当中,大多数的字符串检索都可以通过来完成。导入模块在使用正则表达式之前,需要导入模块。 ...

    tulayang 评论0 收藏0
  • Python 正则表达re 模块简明笔记

    摘要:假设现在想把字符串你好,,世界中的中文提取出来,可以这么做你好,,世界注意到,我们在正则表达式前面加上了两个前缀,其中表示使用原始字符串,表示是字符串。本文标题为正则表达式模块简明笔记本文链接为参考资料正则表达式 简介 正则表达式(regular expression)是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串,可以匹配其自身。比如,正则表达式 hello 可以匹配字符...

    lastSeries 评论0 收藏0
  • Python中的正则表达

    摘要:正则表达式匹配的字符串限定范围和否定除了单字符外,字符集还支持匹配指定的字符范围。问号要求正则表达式引擎在当前正则表达式中尽可能少地匹配字符。正则表达式匹配的字符串表示简单浮点数的字符串扩展表示法正则表达式的扩展表示法,以问号开始。 简介 正则表达式 是包含文本和特殊字符的字符串, 为高级的文本模式匹配, 抽取, 与文本形式的搜索和替换功能提供了基础 Python通过标准库re模...

    Lowky 评论0 收藏0
  • Python3之正则表达详解

    摘要:匹配个或个由前面的正则表达式定义的片段,非贪婪方式精确匹配个前面表达式。所以接着上面的例子,我们可以改写一下正则表达式。因此,我们可以在使用来简化正则表达式的书写。 作者:毕来生微信:878799579 正则表达式本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。 当然对于爬虫来说,有了...

    phpmatt 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<