我有以下代码:
import re
r = re.compile(r'[*-/]')
print r.match('.') is not None
它打印True
,表示'.'
与给定的正则表达式匹配,而不是2.7.3
。我是否遗漏了正则表达式中明显的东西?
我在osx 10.8.2
[]
如果删除了{{1}}集中的三个字符中的任何一个,则可以正常工作。
答案 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 /
其中包含.
因此完全合法。