簡體   English   中英

在Python中使用findall和括號

[英]Use of findall and parenthesis in Python

我需要在+符號之后或字符串的開頭提取所有字母如下所示:

formula = "X+BC+DAF"

我試過了,我不想在結果中看到+號。 我希望只看到['X', 'B', 'D']

>>> re.findall("^[A-Z]|[+][A-Z]", formula)
['X', '+B', '+D']

當我用括號分組時,我得到了這個奇怪的結果:

re.findall("^([A-Z])|[+]([A-Z])", formula)
[('X', ''), ('', 'B'), ('', 'D')]

當我嘗試分組時為什么會創建元組? 如何直接編寫正則表達式,使其返回['X', 'B', 'D']

如果正則表達式中有任何捕獲組,則re.findall僅返回組捕獲的值。 如果沒有組,則返回整個匹配的字符串。

re.findall(pattern, string, flags=0)

返回字符串中pattern的所有非重疊匹配,作為字符串列表。 從左到右掃描字符串,並按找到的順序返回匹配項。 如果模式中存在一個或多個組,則返回組列表; 如果模式有多個組,這將是一個元組列表。 結果中包含空匹配,除非它們觸及另一個匹配的開頭。


如何直接編寫正則表達式,使其返回['X','B','D']?

您可以使用非捕獲組來代替使用捕獲組:

>>> re.findall(r"(?:^|\+)([A-Z])", formula)
['X', 'B', 'D']

或者對於這種特定情況,您可以嘗試使用單詞邊界的更簡單的解決方案:

>>> re.findall(r"\b[A-Z]", formula)
['X', 'B', 'D']

或者使用不使用正則表達式的str.split的解決方案:

>>> [s[0] for s in formula.split('+')]
['X', 'B', 'D']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM