python中可能存在的错误

时间:2013-04-13 21:01:37

标签: python regex

我有以下代码:

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

它打印True,表示'.'与给定的正则表达式匹配,而不是2.7.3。我是否遗漏了正则表达式中明显的东西?

我在osx 10.8.2

上使用cpython []

如果删除了{{1}}集中的三个字符中的任何一个,则可以正常工作。

2 个答案:

答案 0 :(得分:11)

撰写以下内容时,

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

答案 1 :(得分:6)

使用re.DEBUG

进行编译
In [3]: r = re.compile(r'[*-/]', re.DEBUG)
in
  range (42, 47)

给出了范围的定义。 man ascii给出了

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

其中包含.因此完全合法。