проблема в обнаружении 2 последовательных заглавных букв с помощью регулярного выражения python

#python #regex

#python #регулярное выражение

Вопрос:

Вот упражнение, которое я пытаюсь выполнить:

  1. Номерной знак Номерной знак состоит из 2 заглавных букв, тире (‘-‘), 3 цифр, тире (‘-‘) и, наконец, 2 заглавных букв. Напишите скрипт для проверки того, что входная строка является номерным знаком (метод input ()). Если это правильно, выведите «хорошо». Если это неверно, выведите «Not good».

Вот мой код:

 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 и в stack overflow, не нашел никакого решения, не могли бы вы мне помочь, ребята?

Большое спасибо!

Комментарии:

1. я работаю над jupyter notebook, поэтому я уже импортировал регулярное выражение

2. попробуйте изменить [A-Z]{2}[-]d{3}[-][A-Z]{2} на [A-Z]{2}[-]d{3}[-][A-Z]{2}

Ответ №1:

У вас есть посторонняя обратная косая черта в шаблоне. Просто удалите это:

 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'>
  

Кроме того, нет необходимости заключать литерал - в набор символов [] .

Ответ №2:

В вашем регулярном выражении используется устаревший escape-символ:

[A-Z]{2} Не требуется, поскольку [A-Z] это символьный класс, вы не хотите экранировать [ и рассматривать его как символ.

Если вы удалите это, у вас будет:

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

Обратите внимание, что вы также можете удалить [] вокруг вашего - :

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