Python格式的字符串格式检查

时间:2016-02-28 18:34:00

标签: python

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

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

格式(按顺序):

  1. 一个大写字母
  2. 两个小写字母
  3. 三个数字字符(数字)
  4. 示例:“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")
    

    忽略DECLARATION评论。这是考试要求。

    由于

2 个答案:

答案 0 :(得分:9)

如果您被允许导入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查看更详细的解释并测试任意字符串。

答案 1 :(得分:2)

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

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