[英]Matching an object and a specific regex with Python
給定一個文本,我需要檢查每個字符的兩邊是否都有(已編輯的) 3個大寫字母,如果有,請將其添加到一個這樣顯示的字符串中。
我寫了以下代碼: m = re.match("[AZ]{3}.[AZ]{3}", text)
(比如說text =“ AAAbAAAcAAA”)
我希望在匹配對象中獲得兩個組:“ AAAbAAA”和“ AAAcAAA”
現在,當我調用m.group(0)
我得到了“ AAAbAAA”,這是正確的。 但是,當調用m.group(1)
,我發現沒有這樣的組,這意味着“ AAAcAAA”不是匹配項。 為什么?
另外,在調用m.groups()
,我得到一個空的元組,盡管我應該得到一個匹配的元組,這意味着在我的情況下,我應該得到一個帶有“ AAAbAAA”的元組。 為什么不起作用?
您的模式中沒有任何組。 要捕獲組中的某物,必須用括號將其括起來:
([A-Z]{3}).[A-Z]{3}
m.group(0)
是例外,它將始終包含整個匹配項。
查看您的問題,聽起來您實際上並不是在尋找捕獲組,而是重疊的匹配項。 在正則表達式中,組是指比賽中較小的部分,留作以后使用。 例如,如果您嘗試將電話號碼與類似
([0-9]{3})-([0-9]{3}-[0-9]{4})
那么區號將在group(1)
,本地部分在group(2)
,而整個事物將在group(0)
。
您要查找重疊的匹配項。 這是一個Stack Overflow答案,解釋了如何在Python regex中進行重疊匹配 ,這是我最喜歡的捕獲組和regex參考。
第一,看起來像findall
時,您正在使用match
。 它不會抓住封閉的大寫re.findall('[AZ]{3}([az])(?=[AZ]{3})', search_string)
三元組,但是re.findall('[AZ]{3}([az])(?=[AZ]{3})', search_string)
將為您提供所有小寫字母兩側各有3個蓋帽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.