在Python中,如何检查一个字符串是否包含字母或数字?

7
如果字符串中含有字母或数字,返回true。否则,返回false。
我必须这样做,对吧?
return re.match('[A-Z0-9]',thestring)

3
有用的提示:不要轻率地认为正则表达式是唯一(或最好的)方法。通常会有更好的方法。 - Chris Morgan
3
如果字符串包含至少一个字母或数字,或者字符串仅包含字母或数字,您希望返回true吗? - Adrien Plisson
4个回答

18

使用 thestring.isalnum() 方法。

>>> '123abc'.isalnum()
True
>>> '123'.isalnum()
True
>>> 'abc'.isalnum()
True
>>> '123#$%abc'.isalnum()
>>> a = '123abc' 
>>> (a.isalnum()) and (not a.isalpha()) and (not a.isnumeric())
True
>>> 

2
@Owalla 我猜 isalnum() 中的 alnum 部分代表字母数字,也就是说 包含字母或数字。听起来 Python 有一个内置的字符串方法可以为您执行此测试,因此无需使用正则表达式。 - Anthony Grist
1
@Owalla 内置的 .isalbnum() 方法检查字符串是否为字母数字。正则表达式会过度解决这个操作。 - techiev2
2
这个答案对于问题的解答是错误的:“如果字符串具有字母或数字,则返回true。否则返回false。” 这个答案展示了如何检查所有字符是否都是字母数字字符。 - glicerico
1
有趣的问题是,thestring.isalnum() 对于非标准字母数字字符返回 true,例如上标字符,如此例所示:"5432¹".isalnum() == True。这可能会破坏您的使用情况(就像我的一样)。 - Joelster

5

如果您想检查所有字符是否为字母数字:

  • string.isalnum()(如@DrTyrsa所指出的),或者
  • bool(re.match('[a-z0-9]+$', thestring, re.IGNORECASE))

如果您想检查是否至少有一个字母数字字符存在:

import string
alnum = set(string.letters + string.digits)
len(set(thestring) & alnum) > 0

或者

bool(re.search('[a-z0-9]', thestring, re.IGNORECASE))

在忽略大小写的情况下,检查字符串中是否存在字母或数字,并返回布尔值。


3
我的简短测试表明,正如我所预期的那样,[A-Za-z0-9][a-z0-9] 再加上 re.IGNORECASE 标志要稍微快一些。而且它确实更优美。(不管怎样,它仍然比 str.isalnum() 慢大约十倍左右)。 - Chris Morgan
1
@Chris Morgan:感谢您的基准测试!如果我想检查所有字符,我会选择isalnum()。我只是添加了正则表达式,因为OP在评论中明确要求它。 - mhyfritz

2

如果您想确定字符串中至少有一个字母或数字,可能需要一些时间,但我们可以使用

re.match('. * [a-zA-Z0-9]。*', yourstring)


0

关于什么?

stringsample.isalpha() 

方法?


3
请重新阅读问题,他们正在寻找字母数字字符。而且,有效的答案已经在两年前提供了。虽然贡献总是受欢迎的,但最好不要唤起旧的帖子,除非回复比现有答案做出了 显著 的贡献。 - Leigh

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