Python正则表达式findall *

时间:2015-05-30 23:22:23

标签: python regex findall

我无法理解以下代码行为。

>>> import re
>>> text = 'been'
>>> r = re.compile(r'b(e)*')
>>> r.search(text).group()
'bee' #makes sense
>>> r.findall(text)
['e'] #makes no sense

我读了一些关于捕获群组的所有问题和答案。但我仍然感到困惑。有人可以解释一下。

2 个答案:

答案 0 :(得分:1)

当模式包含捕获组时,findall仅返回捕获组的内容,而不再返回整个匹配。

如果这种行为看起来很奇怪,那么在特定的上下文(子串之前或之后)中轻松提取字符串的部分非常有用,特别是因为python re模块不支持可变长度的lookbehinds。

答案 1 :(得分:1)

Regex Howto

简化了答案

正如您可以阅读heregroup返回正则表达式匹配的字符串。

  

group()返回RE匹配的子字符串。

findall

>>> r = re.compile(r'(b)(e)*') >>> r.findall(text) [('b', 'e')] 的行为是合理的
  

如果模式中存在一个或多个组,则返回组列表;如果模式有多个组

,这将是一个元组列表

所以你得到了捕获组的匹配部分。

一些实验包括:

<a class="fancybox-thumb" rel="gallery1" href="images/index/Dwayne5.jpg" >     
                        <!--slideshow image 1-->

<img src="images/index/artfuldogerthumbnail.jpg" alt="main icon" />
                          <!--This is the little image on page-->
</a>




<a class="fancybox-thumb"rel="gallery1"href="images/index/artfuldogerthumbnail.jpg" title="colour dodger"> 
                            <!--slideshow image 2-->

 </a>

 <a class="fancybox-thumb" rel="gallery1"href="images/index/sheree.png" title="">
 </a>
                            <!--slideshow image 2-->

此处正则表达式有两个捕获组,因此返回的值是匹配组的列表(在元组中)