我试图解析一个字符串,其中某个部分可以包含在"
或'
之间,或者根本不包含在内。但是,我很难找到一个语法,当没有引号时。
请参阅以下(简化)示例:
>>> print re.match(r'\w(?P<quote>(\'|"))?\w', 'f"oo').group('quote')
"
>>> print re.match(r'\w(?P<quote>(\'|"))?\w', 'foo').group('quote')
None
>>> print re.match(r'\w(?P<quote>(\'|"))?\w(?P=quote)', 'f"o"o').group('quote')
"
>>> print re.match(r'\w(?P<quote>(\'|"))?\w(?P=quote)', 'foo').group('quote')
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<string>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
'NoneType' object has no attribute 'group'
上次尝试的所需结果应为None
,作为示例中的第二个命令。
答案 0 :(得分:0)
基于我对另一个问题的建议,我能够产生一个略有不同的正则表达式,提供正确的答案:
>>> 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"'"
诀窍是在匹配的角色上使用量词而不是整个群体。
[此示例中的前导和尾随\w
仅用于防止正则表达式匹配完整字符串(作为未加引号的字符串)。在实际情况下,这不是必需的,因为这个匹配是更大的正则表达式的一部分,前一组和后一组匹配]。