繁体   English   中英

Python正则表达式findall *

[英]Python regular expression 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

我阅读了一些有关捕获组和所有组的已有问题和答案。 但是我还是很困惑。 有人可以解释一下。

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

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

答案在“正则表达式”中简化了

如您所见group返回与正则表达式匹配的字符串。

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

但是findall的操作在文档中是合理的

如果该模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。 如果模式有多个组,这将是一个元组列表

因此,您将获得捕获组的匹配部分。

一些实验包括:

>>> r = re.compile(r'(b)(e)*')
>>> r.findall(text)
[('b', 'e')]

这里的正则表达式有两个捕获组,因此返回的值是匹配组的列表(以元组为单位)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM