【问题标题】:Python re: why does [,-_] match "="?Python re:为什么 [,-_] 匹配“=”?
【发布时间】:2017-10-04 07:57:03
【问题描述】:

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

【问题讨论】:

标签: python regex python-2.7


【解决方案1】:

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

请参阅full ASCII table

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你也可以只将连字符设置为字符类中的第一个或最后一个字符,因此它不可能表示范围;然后按字面意思理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2010-12-07
    • 2012-02-13
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多