我正在导入string,并尝试检查文本是否仅包含"a-z"、"A-Z"和"0-9"。
但是当我输入字母和数字时,我只会获得输入,而不会打印出成功。
import string
text=input("Enter: ")
correct = string.ascii_letters + string.digits
if text in correct:
print("Success")
我正在导入string,并尝试检查文本是否仅包含"a-z"、"A-Z"和"0-9"。
但是当我输入字母和数字时,我只会获得输入,而不会打印出成功。
import string
text=input("Enter: ")
correct = string.ascii_letters + string.digits
if text in correct:
print("Success")
您可以使用正则表达式来实现,例如对字符串进行以下模式匹配:
import re
pattern = re.compile("[A-Za-z0-9]+")
pattern.fullmatch(string)
解释:
[A-Za-z0-9]
匹配 A-Z, a-z 和 0-9 范围内的字符,即字母和数字。
+
表示匹配前面的模式出现一次或多次。
re.fullmatch()
方法允许检查整个字符串是否与正则表达式模式匹配。如果找到匹配,则返回相应的匹配对象,否则如果字符串不匹配模式,则返回None
。
综上所述:
import re
if __name__ == '__main__':
string = "YourString123"
pattern = re.compile("[A-Za-z0-9]+")
# if found match (entire string matches pattern)
if pattern.fullmatch(string) is not None:
print("Found match: " + string)
else:
# if not found match
print("No match")
pattern = re.compile("[a-z0-9]", re.I)
。(re.I
是 re.IGNORECASE
的缩写。) 但这与已经存在的内容相同。 - David Culbrethstr.isalnum()
即可。>>> "123AbC".isalnum()
True
>>> "1&A".isalnum()
False
参考文档:
如果字符串中的所有字符都是字母数字且至少有一个字符,则返回 true;否则返回 false。字符
c
是字母数字的条件之一是以下任何一个返回True
:c.isalpha()
、c.isdecimal()
、c.isdigit()
或c.isnumeric()
。
如果不想检查 str.isdigit()
或 str.isnumeric()
,以允许数字中包含小数点,请使用 str.isnumeric()
和 str.isalpha()
:
>>> all(c.isnumeric() or c.isalpha() for c in "123AbC")
True
>>> all(c.isnumeric() or c.isalpha() for c in "1&A")
False
(_)
,这也可以正常工作:>>> re.fullmatch("\w", "123AbC", re.A)
True
>>> re.fullmatch("\w", "1&A", re.A)
False
\w
与[a-zA-Z0-9_]
匹配。\w
的说明:import string
text = input("Enter: ")
correct = string.ascii_letters + string.digits
status = True
for char in text:
if char not in correct:
status = False
if status:
print('Correct')
else:
print('InCorrect')
您正在测试整个字符串是否在字符串'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
中
假设输入为'testInput'
您正在检查'testInput'
是否在字符串'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
中,但实际上它不在其中。
您需要逐个检查每个字符
您可以使用一个函数来轻松完成此操作
import string
def validCharacters(text):
correct = string.ascii_letters + string.digits
for character in text:
if character not in correct:
return False
return True
text = input("Enter: ")
if validCharacters(text):
print("Correct")
else:
print("Incorrect")
import re
text = input("Enter: ")
result = re.sub("[A-Za-z0-9]", '', text)
if len(result) == 0:
print("Success")
else:
print("Failure")
结果:
abcDEF123 -> Success
hello! -> Failure
你可以用许多不同的方法来实现它,我会按照以下方式利用 set
:
import string
correct = {char for char in string.ascii_letters + string.digits}
def is_correct(text):
return {char for char in text}.issubset(correct)
print(is_correct('letters123')) # True
print(is_correct('???')) # False
print(is_correct('\n')) # False
我只是检查所给文本中的字符组成的set
是否为所有合法字符的set
的子集。请记住,这总是处理整个文本,从性能角度来看不是最好的方法(因为您可能会在找到第一个非法字符后结束检查),但除非您需要处理非常长的文本或在非常短的时间内处理,否则这不应该是问题。
您可以使用正则表达式匹配来检查字符串是否仅包含字母和数字。
import re
text = input("enter:")
regex = r"([0-9a-zA-Z]+)"
match = re.match(regex, string)
if match != None:
print("success")
re.match
调用允许字符串末尾有无效字符,只要你以有效字符开头。你需要在模式中使用 $
(显式匹配字符串的结尾)或使用 re.fullmatch
。 - Blckknght
correct = set(string.ascii_letters + string.digits);all(c in correct for c in text)
- Alexander