如何检查字符串是否有特殊字符?

时间:2013-11-14 05:52:30

标签: python string

如果除了下划线_之外不包含任何特殊字符,我只能在程序中使用字符串。我怎么检查这个?

我尝试使用unicodedata库。但是特殊字符被标准字符所取代。

5 个答案:

答案 0 :(得分:41)

您可以像这样使用string.punctuationany功能

import string
invalidChars = set(string.punctuation.replace("_", ""))
if any(char in invalidChars for char in word):
    print "Invalid"
else:
    print "Valid"

使用此行

invalidChars = set(string.punctuation.replace("_", ""))

我们正在准备一个不允许的标点字符列表。如您所希望允许_,我们会从列表中删除_并将新设置为invalidChars。因为查询的集合速度更快。

如果至少其中一个字符位于any

True函数将返回invalidChars

编辑:正如评论中所述,这是正则表达式解决方案。正则表达式取自https://stackoverflow.com/a/336220/1903116

word = "Welcome"
import re
print "Valid" if re.match("^[a-zA-Z0-9_]*$", word) else "Invalid"

答案 1 :(得分:4)

您需要定义“特殊字符”,但对于某些字符串s,您的意思可能是:

import re
if re.match(r'^\w+$', s):
    # s is good-to-go

答案 2 :(得分:0)

其他人的方法不能解释空格。显然,没有人真的认为空格是特殊字符。

使用此方法来检测不包含空格的特殊字符 :

import re

def detect_special_characer(pass_string): 
  regex= re.compile('[@_!#$%^&*()<>?/\|}{~:]') 
  if(regex.search(pass_string) == None): 
    res = False
  else: 
    res = True
  return(res)

答案 3 :(得分:0)

Cybernetic中的方法一样,为了去掉那些多余的字符,修改函数的第二行

regex= re.compile('[@_!#$%^&*()<>?/\|}{~:]')

regex= re.compile('[@_!#$%^&*()<>?/\\|}{~:\[\]]')

其中 \] 字符用 \ 转义

所以完整:

import re

def detect_special_characer(pass_string): 
  regex= re.compile('[@_!#$%^&*()<>?/\\\|}{~:[\]]') 
  if(regex.search(pass_string) == None): 
    res = False
  else: 
    res = True
  return(res)

答案 4 :(得分:0)

如果字符不是数字、空格或 A-Z,则它是特殊字符


for character in my_string
   if not (character.isnumeric() and character.isspace() and character.isalpha() and character != "_")
       print(" \(character)is special"