Python re:为什么[,-_]匹配“=”?

时间:2017-05-05 18:30:51

标签: python regex python-2.7

我在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正则表达式(或原始字符串)中特殊的任何内容。

2 个答案:

答案 0 :(得分:8)

这与[A-Z]中的成语相同,它匹配从A到Z的所有内容。在这种情况下,它将匹配从,(ASCII#44)到_的所有内容(ASCII #95),包括=(ASCII#61)。

请参阅full ASCII table

答案 1 :(得分:2)

因为连字符(-)定义了一个范围,并且=在ASCII表中位于,_之间。你需要转义它,以便正则表达式引擎将其视为文字连字符,如r'[,\-_]'。解释器会跳过原始字符串,但不会将其视为正则表达式引擎中的文字,这就是您需要转义特殊字符的原因。