我在python 2.7.5中观察到以下行为:
>>> import re
>>> re.match(r'[,-_]', '=') # This matches
<_sre.SRE_Match object at 0x7f24d4981308>
>>> re.match(r'[-,_]', '=') # This doesn't match
>>> re.match(r'[-_,]', '=') # Nor does this
有人可以解释我在这里看到的内容吗?我似乎无法找到关于,-_
在python正则表达式(或原始字符串)中特殊的任何内容。
答案 0 :(得分:8)
这与[A-Z]
中的成语相同,它匹配从A到Z的所有内容。在这种情况下,它将匹配从,
(ASCII#44)到_
的所有内容(ASCII #95),包括=
(ASCII#61)。
请参阅full ASCII table。
答案 1 :(得分:2)
因为连字符(-
)定义了一个范围,并且=
在ASCII表中位于,
和_
之间。你需要转义它,以便正则表达式引擎将其视为文字连字符,如r'[,\-_]'
。解释器会跳过原始字符串,但不会将其视为正则表达式引擎中的文字,这就是您需要转义特殊字符的原因。