我有以下代碼:可能的錯誤重新
import re
r = re.compile(r'[*-/]')
print r.match('.') is not None
它打印True
,表示'.'
給定的正則表達式,它不匹配。我在正則表達式中錯過了一些明顯的東西嗎?
我使用CPython的2.7.3
在OSX 10.8.2
如果任何[]
集合內的三個字符被刪除,它的工作原理。
我有以下代碼:可能的錯誤重新
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