【问题标题】:Matching string with regular expression用正则表达式匹配字符串
【发布时间】:2023-01-30 18:34:26
【问题描述】:

我正在尝试创建一个函数,如果用户输入的用户名与正则表达式匹配则访问该函数。这是我的代码:

def regular_expression():
    rules = "[A-Z]^{1}[a-zA-Z0-9]+[0-9]$"

    while True:
        username = str(input("Username Must have:\n"
                             "- First character must be an upper case letter\n"
                             " - Middle can be any letter or number\n"
                             "- Last character must be a number\n"
                             "> "
                             ))

        if re.fullmatch(rules, username):
            print("Accepted")

这是我收到的错误:

    return _compile(pattern, flags).fullmatch(string)
    p = sre_compile.compile(pattern, flags)
    p = sre_parse.parse(p, flags)
    p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
    source.tell() - here + len(this))
re.error: multiple repeat at position 9

【问题讨论】:

  • 无法量化字符串的开头。您需要删除 ^$,因为您正在使用 re.fullmatch。另外,删除{1},它总是多余的。
  • 还有一些字符串长度问题(是否可以是 1 个或 2 个字符长?)
  • 请澄清要求,以消除对此处实际意图的任何疑问。 rules = "[A-Z][a-zA-Z0-9]+[0-9]" 有效吗?

标签: python regex


【解决方案1】:

问题是“^{1}”在你的“规则”变量中,它的目的是什么?

我设法用这个来完成这项工作:

def regular_expression():
    rules = "^[A-Z][a-zA-Z0-9]+[0-9]$"

while True:
    username = str(input("Username Must have:
"
                         "- First character must be an upper case letter
"
                         " - Middle can be any letter or number
"
                         "- Last character must be a number
"
                         "> "
                         ))

    if re.fullmatch(rules, username):
        print("Accepted")
        break

*不要忘记添加'break',退出你的循环;)

【讨论】:

    最近更新 更多