Python 非捕获组中的捕获组
我想捕获两个组,但其中一个在非捕获组中。i、 ePython 非捕获组中的捕获组,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
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(?:…)
表示非捕获组。它是一个不会被捕获的组,不能用于反向引用。这并不意味着它是可选的。谢谢你的澄清