我想检查给定的单词是否包含特殊字符。
所以下面是我的python代码
文字'a @ bcd'有'@',所以它会匹配,没关系。
但'a1bcd'没有特殊的性格。但它也被过滤了!
import re
regexp = re.compile('[~`!@#$%^&*()-_=+\[\]{}\\|;:\'\",.<>/?]+')
if regexp.search('a@bcd') :
print 'matched!! nich catch!!'
if regexp.search('a1bcd') :
print 'something is wrong here!!!'
结果: python ../special_char.py 匹配! nich抓住!! 这里有些不对劲!!!
我不知道为什么它像上面那样工作..有人帮助我...... T_T ;;; 感谢〜
答案 0 :(得分:1)
将正则表达式中的短划线移动到[]
组的开头,如下所示:
regexp = re.compile('[-~`!@#$%^&*()_=+\[\]{}\\|;:\'\",.<>/?]+')
如果您使用短划线,则会将其与周围的字符)-_
一起阅读,因为它位于[]
内,所以它被解释为要求匹配从)
到{{的范围1}}。如果您将短划线移动到_
之后,它没有特殊含义,而是匹配自己。
这是一个交互式会话,显示正则表达式中的特定问题:
[
修好后:
>>> 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
。
答案 1 :(得分:1)
re
对于此
我建议尝试
specialchars = '''-~`!@#$%^&*()_=+[]{}\\|;:'",.<>/?'''
len(word) != len(word.translate(None, specialchars))
或
set(word) & set(specialchars)