可能的错误重新
问题描述:
我有以下代码:可能的错误重新
import re
r = re.compile(r'[*-/]')
print r.match('.') is not None
它打印True
,表示'.'
给定的正则表达式,它不匹配。我在正则表达式中错过了一些明显的东西吗?
我使用CPython的2.7.3
在OSX 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
答
re.DEBUG
使用
In [3]: r = re.compile(r'[*-/]', re.DEBUG)
in
range (42, 47)
其给出的范围内的定义编译它。 man ascii
给出
42 *
43 +
44 ,
45 -
46 .
47 /
其包括.
因此完全合法的。
特殊字符在集合内失去意义:http://docs.python.org/2/li brary/re.html#regular-expression-syntax – sobel