我想捕获两个组,但其中一个位于一个非捕获组内,例如:
那样做是可行的,但如果我的文本只有
import re
text = 'column{fields}'
parsed = re.search(r'(\w+)(?:{(\w+)})', text)
parsed.groups() # prints ('column', 'fields')
那样做是可行的,但如果我的文本只有
'column'
,那么regex
就是NoneType。
(?:{(\w+)})
中,我实际上是在声明{(\w+)}
为可选项。为什么不是呢? - whitenoisedb( ... )?
和(?: ... )
是一样的。那么,(?: ... )?
就是多余的吗? - whitenoisedb(?:...)
表示非捕获组。它是一个不会被捕获并且不能在反向引用中使用的组。这并不意味着它是可选的。 - anubhava