python正则表达式:如何仅过滤特殊字符?

python正则表达式:如何仅过滤特殊字符?,python,regex,Python,Regex,我想检查给定的单词是否包含特殊字符。 下面是我的python代码 字面意思是a@bcd'has'@',因此它将匹配并且没有问题。 但是“a1bcd”没有什么特殊的特征。但是它也被过滤了 import re regexp = re.compile('[~`!@#$%^&*()-_=+\[\]{}\\|;:\'\",.<>/?]+') if regexp.search('a@bcd') : print 'matched!! nich catch!!' if regex

我想检查给定的单词是否包含特殊字符。
下面是我的python代码

字面意思是a@bcd'has'@',因此它将匹配并且没有问题。
但是“a1bcd”没有什么特殊的特征。但是它也被过滤了

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

if regexp.search('a@bcd') :
    print 'matched!! nich catch!!'

if regexp.search('a1bcd') :
    print 'something is wrong here!!!'
重新导入
regexp=re.compile('[~`!@$%^&*()-\=+\[\]{}\\\\\\\;;:\'\'”,./?]+'))
if regexp.search('a@bcd') :
打印“匹配!!不匹配!!”
如果regexp.search('a1bcd'):
打印“这里有问题!!!”
结果: python../special_char.py 匹配!!尼克接球!! 这里有点不对劲

我不知道为什么它会像上面那样工作有人帮帮我吗;;;
谢谢~

将正则表达式中的破折号移动到
[]
组的开头,如下所示:

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

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

除非你的问题中有什么原因不明显,否则我还要说,不需要最后的
+

re
在这方面相对较慢

我建议你试试

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