簡體   English   中英

使用Python匹配對象和特定正則表達式

[英]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.

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