regex 匹配字符串而不考虑空格

fnvucqvd  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(90)

我正在创建一个正则表达式,用于匹配两种格式的车牌号码:或者{1到9的数字}-{5个数字或字母},或者{2位数字}-{4个数字或字母}。
我使用以下正则表达式模式:^\s*[1-9]-[A-Z1-9]{5}|[1-9][0-9]-[A-Z1-9]{4}\s*$。它匹配的一些示例是:45-Y21A3-78UTW67-AASE
我目前的问题是正则表达式不能匹配带有尾随空格的车牌号码,例如5-37D8F。我以为\s*会照顾到这一点,但它似乎不工作的一些原因。
正则表达式可以很好地匹配前导空格,所以我不明白为什么它在处理尾随空格时会有问题。

8nuwlpux

8nuwlpux1#

我不知道为什么你想匹配车牌号码与他们的前导和尾随空格(如果我理解的任务正确),而不是车牌号码本身,但似乎你的模式不匹配前导空格或尾随空格,至少在大多数情况下。
然而,以下模式似乎可以完成这项工作:

^\s*(?:\d-[A-Z1-9]{5}|\d{2}-[A-Z1-9]{4})\s*$

如以下试验所示:

import re

your_pattern = r"^\s*[1-9][-][A-Z1-9]{5}|([1-9][0-9])[-][A-Z1-9]{4}\s*$"
my_pattern = r"^\s*(?:\d-[A-Z1-9]{5}|\d{2}-[A-Z1-9]{4})\s*$"

license_plate_numbers = [
    "45-Y21A",
    "3-78UTW",
    "  67-AASE",
    "5-37D8F",
    "5-37D8F   ",
    " 5-37D8F ",
]

for license_plate_number in license_plate_numbers:
    match1 = re.match(your_pattern, license_plate_number)
    match2 = re.match(my_pattern, license_plate_number)

    print(f"License plate number: '{license_plate_number}'")

    if match1:
        print(f"Your pattern matches: '{match1.group(0)}'")
    else:
        print("Your pattern does not match anything")

    if match2:
        print(f"My pattern matches: '{match2.group(0)}'")
    else:
        print("My pattern does not match anything")

    print()

输出量:

License plate number: '45-Y21A'
Your pattern matches: '45-Y21A'
My pattern matches: '45-Y21A'

License plate number: '3-78UTW'
Your pattern matches: '3-78UTW'
My pattern matches: '3-78UTW'

License plate number: '  67-AASE'
Your pattern does not match anything
My pattern matches: '  67-AASE'

License plate number: '5-37D8F'
Your pattern matches: '5-37D8F'
My pattern matches: '5-37D8F'

License plate number: '5-37D8F   '
Your pattern matches: '5-37D8F'
My pattern matches: '5-37D8F   '

License plate number: ' 5-37D8F '
Your pattern matches: ' 5-37D8F'
My pattern matches: ' 5-37D8F '

相关问题