可能的错误重新

问题描述:

我有以下代码:可能的错误重新

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

它打印True,表示'.'给定的正则表达式,它不匹配。我在正则表达式中错过了一些明显的东西吗?

我使用CPython的2.7.3在OSX 10.8.2

如果任何[]集合内的三个字符被删除,它的工作原理。

+2

特殊字符在集合内失去意义:http://docs.python.org/2/li brary/re.html#regular-expression-syntax – sobel

当你写下面,

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 
+3

你也可以把'-'最后:'r'[*/- ]''。 –

+0

@PavelAnossov另一个好的解决方案 – Jared

+1

...或者首先'[ - * /]'。 –

re.DEBUG使用

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

其给出的范围内的定义编译它。 man ascii给出

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

其包括.因此完全合法的。