如何检查Python字符串是否包含字母、数字和‘‘’符号,而不包含其他内容?

2024-09-29 19:18:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查Python字符串是否同时包含字母和数字,而不包含其他内容。换句话说,像“A530”、“D592”这样的字符串应该返回True,而像“ABCDE”(所有字母)、“000326”(所有数字)和“A339”这样的字符串应该返回True*加>;“(字母数字,但也有特殊字符)将返回False

我看过很多网站,展示了如何检查字符串是否包含字母或数字,但不是两者都包含。这个站点https://www.geeksforgeeks.org/python-program-to-check-if-a-string-has-at-least-one-letter-and-one-number/展示了如何检查字母和数字,但是它们会遍历字符串中的每个字符,这不是很有效,如果可能的话,我会尽量避免这样做


Tags: 字符串gtfalsetrue内容站点网站字母
3条回答

如果你不喜欢正则表达式,那就这样吧

单独检查所有条件。它是Pythonic,可读性也很好

代码:

import string

lst = ["A530", "D592", "ABCDE", "000326", "A339*加>"]
str_ascii_digits = string.ascii_letters + string.digits
passed = [s for s in lst if 
            any(ch in string.ascii_letters for ch in s ) and 
            any(ch in string.digits for ch in s) and 
            all((ch in str_ascii_digits for ch in s))]
print(passed)

输出:

['A530', 'D592']
    

如果这些字符串是单个字符串,则可以使用正则表达式检查:

import re

re.match("^(?=.*[a-zA-Z])(?=.*[\d])[a-zA-Z\d]+$", "A530") # Will return an re.Match object
re.match("^(?=.*[a-zA-Z])(?=.*[\d])[a-zA-Z\d]+$", "A339*加>") # Will return None
re.match("^(?=.*[a-zA-Z])(?=.*[\d])[a-zA-Z\d]+$", "AAAA") # Will return None
re.match("^(?=.*[a-zA-Z])(?=.*[\d])[a-zA-Z\d]+$", "0000") # Will return None

不带正则表达式的解决方案:)

s=input()
print(not ((all(i.isdigit() for i in s) or (all(i.isalpha() for i in s)) or (any(not i.isalnum() for i in s)))))

相关问题 更多 >

    热门问题