我有以下代码:
import re
r = re.compile(r'[*-/]')
print r.match('.') is not None
它打印True
,表示它'.'
与给定的正则表达式匹配,但它不匹配。我在正则表达式中遗漏了一些明显的东西吗?
我2.7.3
在 osx 上使用 cpython10.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>
要更正正则表达式使其仅匹配*
or-
或,您可以像这样/
转义,-
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 /
其中包括一个.
因此完全合法的。