Python中的字符串格式检查

2024-05-16 11:13:20 发布

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

在准备AS级计算机科学考试时,我在预发布材料中遇到了一个问题:

提示用户输入用户ID,并检查ID的格式是否与预定义的格式规则对应,并相应地输出。

格式(按顺序):

  1. 一个大写字母
  2. 两个小写字母
  3. 三个数字字符(数字)

示例:“Abc123”

我用自己选择的语言(Python)提出了一个解决方案,但是,我想知道是否有更优雅或更好的方法来解决这个问题。尤其是第三张支票。

这是我的代码:

#Task 2.2

u_id = input("Input User ID: ") #DECLARE u_id : string
numbers = [str(num) for num in range(10)]

#Checking if final 3 characters of User ID (u_id) are digits
for i in list(u_id[3::]):
    if i not in numbers:
        digit_check = False #DECLARE digit_check : bool
        break
    else:
        digit_check = True

#User ID format check
if (u_id[0:1].isupper() == True) and (u_id[1:3] == u_id[1:3].lower()) and (digit_check == True):
    print ("Correct Format")
else:
    print ("Wrong Format")

忽略声明注释。这是考试要求。

谢谢


Tags: 用户inidtrueforifcheck格式
2条回答

如果允许您导入re

import re

u_id = input("Input User ID: ") #DECLARE u_id : string

rex = re.compile("^[A-Z][a-z]{2}[0-9]{3}$")
if rex.match(u_id):
    print("Correct format")
else:
    print("Incorrect")

表述说明:

  • ^表示字符串的开头。
  • [A-Z]是一个范围,包含所有大写字母(在英文字母表中)。
  • [a-z]是一个范围,包含所有小写字母。
  • [0-9]是一个包含所有数字的范围。
  • {n}指定将匹配n项(项是在花括号之前的任何项)。
  • $表示字符串的结尾。

此外,您还可以看到更详细的解释,并针对这个正则表达式here测试任意字符串。

如果你想在没有正则表达式的情况下解决它(注意,在这种情况下,它们是正确的工具!),你可以这样做:

id_format = [
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ", # or string.ascii_uppercase etc.
    "abcdefghijklmnopqrstuvwxyz",
    "abcdefghijklmnopqrstuvwxyz",
    "0123456789",
    "0123456789",
    "0123456789",
]

def check(input):
    # check for same length
    if len(input) != len(id_format):
        return False

    for test, valid in zip(input, id_format): # itertools.zip_longest can make
        if test not in valid:                 # the length check unnecessary
            return False       

    return True

check("Abc123") # True
check("abc123") # False

相关问题 更多 >