簡體   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