Python 如何重新匹配未捕获任何内容的组?

Python 如何重新匹配未捕获任何内容的组?,python,regex,Python,Regex,我试图解析一个字符串,其中某个部分可以被括在“或”之间,也可以根本不被括起来。但是,我正在努力寻找一种语法,这种语法在根本没有引号的情况下工作 请参见以下(简化)示例: >>打印重新匹配(r'\w(?P(\''|'))\w',f“oo').group('quote')) " >>>打印重新匹配(r'\w(?P(\'\124;))))\ w',foo').group('quote')) 没有一个 >>>打印重新匹配(r'\w(?P(\'\124;)))\ w(?P=quote)'f“o”o')。组

我试图解析一个字符串,其中某个部分可以被括在
之间,也可以根本不被括起来。但是,我正在努力寻找一种语法,这种语法在根本没有引号的情况下工作

请参见以下(简化)示例:

>>打印重新匹配(r'\w(?P(\''|'))\w',f“oo').group('quote'))
"
>>>打印重新匹配(r'\w(?P(\'\124;))))\ w',foo').group('quote'))
没有一个
>>>打印重新匹配(r'\w(?P(\'\124;)))\ w(?P=quote)'f“o”o')。组('quote'))
"
>>>打印重新匹配(r'\w(?P(\'\124;)))\ w(?P=quote)'foo').group('quote'))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第1行,在
AttributeError:“非类型”对象没有属性“组”
“非类型”对象没有属性“组”

最后一次尝试的预期结果应该是
None
,作为示例中的第二个命令。

根据我对另一个问题的建议,我能够生成一个稍微不同的正则表达式,提供正确的答案:

>>> re.match(r'\w(?P<quote>[\'"]?)\w(?P=quote)\w', 'foo').group('quote')
u''

>>> re.match(r'\w(?P<quote>[\'"]?)\w(?P=quote)\w', 'f"o"o').group('quote')
u'"'

>>> re.match(r'\w(?P<quote>[\'"]?)\w(?P=quote)\w', 'f\'o\'o').group('quote')
u"'"
>>re.match(r'\w(?P[\'”]?)\w(?P=quote)\w',foo').group('quote'))
u“
>>>re.match(r'\w(?P[\'”]?)\w(?P=quote)\w',f“o”o')。组('quote'))
u''
>>>re.match(r'\w(?P[\'”]?)\w(?P=quote)\w',f'o'o').group('quote'))
u“'”
诀窍是对匹配的字符使用量词,而不是对整个组使用量词

[本例中的前导和尾随
\w
仅用于防止正则表达式匹配完整字符串(作为不带引号的字符串)。在实际情况下,这是不需要的,因为此匹配是较大正则表达式的一部分,之前和之后的组匹配]

>>> re.match(r'\w(?P<quote>[\'"]?)\w(?P=quote)\w', 'foo').group('quote')
u''

>>> re.match(r'\w(?P<quote>[\'"]?)\w(?P=quote)\w', 'f"o"o').group('quote')
u'"'

>>> re.match(r'\w(?P<quote>[\'"]?)\w(?P=quote)\w', 'f\'o\'o').group('quote')
u"'"