2013-11-21 41 views
0

我想檢查給定的單詞是否包含特殊字符。
所以下面是我的python代碼
python正則表達式:我怎樣才能過濾只有特殊字符?

字面'a @ bcd'有'@',所以它會匹配並且沒關係。
但'a1bcd'沒有特殊字符。但它也被過濾了!

import re 
regexp = re.compile('[~`[email protected]#$%^&*()-_=+\[\]{}\\|;:\'\",.<>/?]+') 

if regexp.search('[email protected]') : 
    print 'matched!! nich catch!!' 

if regexp.search('a1bcd') : 
    print 'something is wrong here!!!' 

結果: 蟒蛇../special_char.py 匹配!尼克趕上! 這裏有什麼不對!

我不知道它爲什麼像上述一樣工作..有人幫助我..T_T ;;; 感謝〜

回答

1

正則表達式移動破折號你到[]組的開始,像這樣:

regexp = re.compile('[-~`[email protected]#$%^&*()_=+\[\]{}\\|;:\'\",.<>/?]+') 

如果你有幾許,它與周圍的文字解讀爲)-_,並因爲它在[]之內,它被解釋爲要求匹配範圍從)_。如果將短劃線移動到[之後,它沒有特殊含義,而是相匹配。

這裏顯示的具體問題有在你的正則表達式的交互式會話:

>>> import re 
>>> print re.search('[)-_]', 'abcd') 
None 
>>> print re.search('[)-_]', 'a1b') 
<_sre.SRE_Match object at 0x7f71082247e8> 
>>> print re.search('[)-_]', 'a1b').group(0) 
1 

將其固定後:

>>> print re.search('[-)_]', 'a1b') 
None 

除非有一個在你的問題的原因並沒有看到,我會也說最後的+是不需要的。

+0

謝謝!我明白了' - '的意思! – kukuta

1

re會比較慢這

我建議嘗試

specialchars = '''-~`[email protected]#$%^&*()_=+[]{}\\|;:'",.<>/?''' 
len(word) != len(word.translate(None, specialchars)) 

set(word) & set(specialchars)