Python 非捕获组中的捕获组

Python 非捕获组中的捕获组,python,regex,Python,Regex,我想捕获两个组,但其中一个在非捕获组中。i、 e import re text = 'column{fields}' parsed = re.search(r'(\w+)(?:{(\w+)})', text) parsed.groups() # prints ('column', 'fields') 但是,如果我的文本仅为'column',regex为非类型,则可以将第二个非捕获组设置为可选: >>> text = 'column' >>> parsed

我想捕获两个组,但其中一个在非捕获组中。i、 e

import re

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

但是,如果我的文本仅为
'column'
regex
为非类型,则可以将第二个非捕获组设置为可选:

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

(?:{(\w+)})的末尾,
将在
之后成为一部分,即
(?:{(\w+)})
可选

我认为当我在做
(?:{(\w+)}
时,我实际上是在声明
{(\w+}
为可选。为什么不呢?要使正则表达式中的任何部分成为可选的,您需要将
放在它后面(如答案所示)。是的,但我认为
(…)?
(?:…)
相同。在这种情况下,is
(?:…)?
reduntant?No
(?:…)
表示非捕获组。它是一个不会被捕获的组,不能用于反向引用。这并不意味着它是可选的。谢谢你的澄清