2013-11-21 37 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)