我无法理解以下代码行为。
>>> import re
>>> text = 'been'
>>> r = re.compile(r'b(e)*')
>>> r.search(text).group()
'bee' #makes sense
>>> r.findall(text)
['e'] #makes no sense
我读了一些关于捕获群组的所有问题和答案。但我仍然感到困惑。有人可以解释一下。
答案 0 :(得分:1)
当模式包含捕获组时,findall
仅返回捕获组的内容,而不再返回整个匹配。
如果这种行为看起来很奇怪,那么在特定的上下文(子串之前或之后)中轻松提取字符串的部分非常有用,特别是因为python re模块不支持可变长度的lookbehinds。
答案 1 :(得分:1)
正如您可以阅读here,group
返回正则表达式匹配的字符串。
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-->
此处正则表达式有两个捕获组,因此返回的值是匹配组的列表(在元组中)