2013-05-09 53 views
1

是否有可能在python中命名爲非捕獲組?例如,我想在這種模式(包括引號)匹配字符串:在python中命名爲非捕獲組?

「A = B」 '鳥=天使'

我可以做到以下幾點:

s = '"bird=angel"' 
myre = re.compile(r'(?P<quote>[\'"])(\w+)=(\w+)(?P=quote)') 
m = myre.search(s) 
m.groups() 
# ('"', 'bird', 'angel') 

結果捕獲報價組,這在這裏是不可取的。

+2

爲什麼不只是在你得到比賽時忽略那個特定的捕獲組? – 2013-05-09 21:56:25

+0

萬一有更多的命名組需要被忽略? – qed 2013-05-09 21:58:34

回答

2

你做需要捕獲組,以匹配相同名言:存在re沒有其他的機制,它允許你這樣做,短期的明確區分這兩種報價:

myre = re.compile('"{0}"' "|'{0}'" .format('(\w+)=(\w+)')) 

(它的缺點是給你四個組,每種引用類型有兩個)。

需要注意的是一個並不需要給一個名字報價,雖然:

myre = re.compile(r'([\'"])(\w+)=(\w+)\1') 

工作爲好。

總之,如果可能的話,您最好使用groups()[1:]以獲得您所需要的。

5

不,命名組是總是捕獲組。從re模塊的文檔:

擴展通常不會創建新的組; (?P<name>...)是 這個規則的唯一例外。

和關於命名組分機:

類似定期括號,而是由一羣 匹配的子字符串通過 符號組名正則表達式的其餘部分中訪問名稱

其中regular parentheses表示(...),與(?:...)