2015-09-05 82 views
2

我想捕獲兩個組,但其中一個位於非捕獲組內。即非捕獲組內的捕獲組

import re 

text = 'column{fields}' 
parsed = re.search(r'(\w+)(?:{(\w+)})', text) 
parsed.groups() # prints ('column', 'fields') 

這樣的作品,但如果我的文字只是'column'regex是NoneType。在(?:{(\w+)})?

>>> text = 'column' 
>>> parsed = re.search(r'(\w+)(?:{(\w+)})?', text) 
>>> parsed.groups() 
('column', None) 

?column(?:{(\w+)})可選將使部分:

回答

1

可以使第二屆非捕獲組可選。

+0

我以爲當我在做'(?:{(\ w +)}'時'我實際上聲明'{(\ w +)}'是可選的。爲什麼不? – whitenoisedb

+0

要在正則表達式中使任何部分可選,您需要在它後面放置'?'(如答案所示)。 – anubhava

+0

是的,但我雖然'(...)?'和'(?:...)'是一樣的。在那種情況下,是否是(?:...)?還原劑? – whitenoisedb