簡體   English   中英

如何制作將多個模式匹配到同一索引的 python 正則表達式

[英]How to make python regex which matches multiple patterns to same index

是否可以獲得所有重疊匹配,它們從相同的索引開始,但來自不同的匹配組?

例如,當我從“ABC”正則表達式中查找模式“(A)|(AB)”時,應該返回以下匹配項:

(0,"A") 和 (0,"AB")

對於一種可能性,請參閱 Evpok 的答案。 您的問題的第二種解釋可能是您希望同時匹配來自同一個 position 的所有模式。 在這種情況下,您可以使用前瞻表達式。 例如正則表達式

(?=(A))(?=(AB))

將為您提供所需的結果(即兩種模式與組匹配的所有位置)。

更新:通過額外的說明,這仍然可以使用單個正則表達式來完成。 您只需將上面的兩個組都設為可選,即

(?=(A))?(?=(AB))?(?:(?:A)|(?:AB))

不過我不建議這樣做。 您可以更輕松地分別查找每個模式,然后再加入結果。

string = "AABAABA"
result = [(g.start(), g.group()) for g in re.compile('A').finditer(string)]
result += [(g.start(), g.group()) for g in re.compile('AB').finditer(string)]

我明白了,雖然我不記得在哪里或從誰那里

def myfindall(regex, seq):
    resultlist = []
    pos = 0
    while True:
        result = regex.search(seq, pos)
        if result is None:
            break
        resultlist.append(seq[result.start():result.end()])
        pos = result.start() + 1
    return resultlist

它返回所有(甚至重疊)匹配的列表,每個索引的匹配限制不超過一個。

暫無
暫無

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

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