用python的Regex检测2个连续的大写字母的问题

时间:2019-04-24 12:15:28

标签: python regex

这是我要完成的练习:

  1. 牌照号码 车牌由2个大写字母,破折号('-'),3个数字,破折号('-')和最后2个大写字母组成。编写脚本以检查输入的字符串是否为车牌(input()方法)。 如果正确,则打印“好”。如果不正确,请打印“不好”。

这是我的代码:

import re
plate = input("Enter your License plate number:")
patern = '[A-Z]{2}[-]\d{3}[-]\[A-Z]{2}'
if re.match(patern, plate):
    print("good")

else:
    print("NOT good")

这是我的输出:

Enter your License plate number:AA-999-AA
NOT good

因此,我尝试使用\w而不是[A-Z],它可以使用小写字母,但是使用[A-Z]时,它不能检测到大写字母...

我在Google上搜索并且堆栈溢出,没有找到任何解决方案,您能帮我吗?

非常感谢!

2 个答案:

答案 0 :(得分:4)

图案中有多余的反斜杠。只是remove it

pattern = r"[A-Z]{2}-\d{3}-[A-Z]{2}"

示例:

>>> import re
>>> re.match(r"[A-Z]{2}-\d{3}-[A-Z]{2}", "AA-999-AA")
<re.Match object; span=(0, 9), match='AA-999-AA'>

此外,无需将文字-括在字符集[]中。

答案 1 :(得分:1)

您的正则表达式中有一个过时的转义符:

\[A-Z]{2}-不需要\,因为[A-Z]是字符类,您不想转义[并将其视为字符。< / p>

如果删除它,您将拥有:

[A-Z]{2}[-]\d{3}[-]\[A-Z]{2}

注意,您也可以删除[]周围的-

[A-Z]{2}-\d{3}-\[A-Z]{2}