我有以下代码:

import re
r = re.compile(r'[*-/]')
print r.match('.') is not None


它输出True,表示'.'匹配给定的正则表达式,但不匹配。我在正则表达式中缺少明显的东西吗?

我在osx 2.7.3上使用cpython 10.8.2

如果删除了[]集内的三个字符中的任何一个,则它将起作用。

最佳答案

当您编写以下内容时,

r = re.compile(r'[*-/]')


-的使用实际上意味着匹配*/之间的任何字符。如果您查看ascii表,

*      42
+      43
,      44
-      45
.      46
/      47


这就是为什么它与.字符匹配的原因。您当前的正则表达式也将匹配,

>>> print r.match('+')
<_sre.SRE_Match object at 0x100483370>
>>> print r.match(',')
<_sre.SRE_Match object at 0x100483370>


要纠正正则表达式,使其仅匹配*-/,可以像这样转义-

r = re.compile(r'[*\-/]')


这样您就找不到.的匹配项

>>> print r.match('.') is not None
False

关于python - python re中可能的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15992879/

10-09 18:48