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

28

如果字符串中包含除了下划线符号_之外的特殊字符,我在程序中只能使用它。如何检查?

我试过使用unicodedata库, 但特殊字符只是被替换为标准字符。

5个回答

53

您可以像这样使用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函数将在至少有一个字符在invalidChars中时返回True

编辑: 根据评论要求,这是正则表达式解决方案。正则表达式取自https://dev59.com/9HRC5IYBdhLWcg3wUvQS#336220

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

我们如何使用正则表达式来解决这个问题?抱歉打扰您了,我只是一个初学者。 - Chuvi
让我们在聊天室里继续这个讨论 - Chuvi
2
@Awknewbie 在正则表达式中也要包含空格,像这样 "^[a-zA-Z0-9 _]*$" - thefourtheye
正则表达式 [^a-zA-Z0-9_]*$ 不是应该把 ^ 放在括号里面吗?这样对我来说是有效的。 - clabe45

6

你需要定义“特殊字符”,但对于某些字符串s,你可能是指:

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

返回空格的真值 - Cybernetic

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

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



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)

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)

那个正则表达式找不到任何 [ 和一堆其他字符的出现。 - Diego Vinícius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接