regex 如何检查一个字符串只包含“a-z”、“A-Z”和“0-9”字符

eyh26e7m  于 2023-06-25  发布在  其他
关注(0)|答案(7)|浏览(139)

我正在导入字符串,并试图检查文本是否只包含“a-z”,“A-Z”和“0-9”。
但是我只得到输入,当我输入字母和数字时,它不打印成功

import string
text=input("Enter: ")
correct = string.ascii_letters + string.digits
if text in correct:
    print("Success")
6yoyoihd

6yoyoihd1#

你可以使用正则表达式来实现,例如。根据以下模式检查字符串:

import re
pattern = re.compile("[A-Za-z0-9]+")
pattern.fullmatch(string)

说明:

[A-Za-z0-9]匹配A-Z、a-z和0-9范围内的字符,因此是字母和数字。
+表示匹配1个或多个前面的令牌。
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")
bakd9h0s

bakd9h0s2#

使用str.isalnum()即可

>>> '123AbC'.isalnum()
True
>>> '1&A'.isalnum()
False

引用文档:
如果字符串中的所有字符都是字母数字并且至少有一个字符,则返回true,否则返回false。如果下列之一返回True,则字符c是字母数字: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
jdgnovmf

jdgnovmf3#

您必须分别比较传入文本的每个字母。

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')
bksxznpy

bksxznpy4#

您正在测试整个字符串是否在字符串'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")
rsl1atfo

rsl1atfo5#

我们可以删除所有不是A-Z,a-z或0-9的字符,然后检查剩余字符串的长度。如果它大于0,则有一些字符不是上面的字符:

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
ltskdhd1

ltskdhd16#

你可以用很多不同的方法来做,我会用下面的方法来利用set s:

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的子集。请记住,这总是处理整个文本,从性能的Angular 来看,这不是最好的(因为您可能会在发现第一个非法字符后结束检查),但它应该不会有问题,除非您需要处理很长的文本或在很短的时间内。

30byixjq

30byixjq7#

可以使用正则表达式匹配来检查字符串是否只包含字母和字母

import re
 text = input("enter:")
 regex = r"([0-9a-zA-Z]+)"

 match = re.match(regex, string)

 if match != None:
    print("success")

相关问题