Как проверить строку с помощью регулярного выражения

Я хочу проверить 8-символьную строку со следующими ограничениями по позиции:

  1. Первая позиция должна быть одной из следующих букв: A/M/P/B/S
  2. Вторая и третья позиция – буквы от AA до ZZ.
  3. Четвертая позиция содержит число от 1 до 4
  4. Пятая позиция содержит число от 1 до 4
  5. Шестая-восьмая позиция должна быть числом 000-999

Если он не совпадает, он вернет FALSE. Вот мой код:

import re                       

text = input("input:")
print(text)
   check = re.search("[^S|B|M|P|A][AA-ZZ][1-4][1-4][000-999]", text)
if check: 
 print("TRUE")
else: 
 print("FALSE")

Пример: AIK22001 Значение Uotput должно быть «True».

Здесь я попытался использовать библиотеку regex Python, но результат был неправильным. Он возвращает False вне зависимости от ожидаемого значения True.


person Fa Thur    schedule 18.02.2021    source источник
comment
Добро пожаловать в СО. Возможно, сначала попробуйте протестировать и исправить регулярное выражение с помощью подобного инструмента, а затем реализовать его на python. Не забудьте выбрать регулярное выражение python в инструменте, который я связал.   -  person Akshay Sehgal    schedule 18.02.2021
comment
Извините, но как это вообще может печатать true. Оператор «if else if» будет запускать «elif» только тогда, когда «if» ложно, а «elif» истинно. Если введено «if», то «elif» и «else» не будут работать. Вы определяете проверку в операторе «если», поэтому невозможно, чтобы «элиф» когда-либо запускался. Я считаю, что это просто опечатка с вашей стороны, и все, что вам нужно сделать, это сделать проверку отдельным оператором «если». или переместите его перед оператором if   -  person The Grand J    schedule 18.02.2021
comment
Что-то вроде этого? ^[AMPBS][A-Z]{2}[1-4]{2}\d{3}$   -  person Hao Wu    schedule 18.02.2021
comment
if len(text) == 8, проверка не определена. Так что это не удастся. Он войдет и выполнит re.search только в том случае, если длина строки не равна 8. Сначала вы хотите это исправить.   -  person Joe Ferndz    schedule 18.02.2021
comment
ваша проблема в том, что выражение if не регулярное выражение   -  person Joe Ferndz    schedule 18.02.2021


Ответы (1)


Вот пример того, как использовать сайт regex101, о котором Акшай Сегал упомянул выше:

https://regex101.com/r/KtzJY6/1

Вы увидите регулярное выражение ^[AMPBS][A-Z]{2}[1-4]{2}[0-9]{3}$. Важные особенности, на которые следует обратить внимание:

  • Якоря ^ и $ присоединяются к началу и концу строки, что предотвращает совпадение слишком коротких и слишком длинных входных данных.
  • Квантификаторы, такие как {2}, что означает две из предыдущих вещей
  • Обратите внимание, как работают квадратные скобки []. Вам не нужно | в их середине, а диапазоны работают только с отдельными символами; [AA-ZZ] соответствует «A», что-то между «A» и «Z» и «Z», что, вероятно, не то, что вы хотели.
person Joe Hildebrand    schedule 18.02.2021
comment
Я думаю, вы пропустили [1-4] - person Hao Wu; 18.02.2021
comment
Ага. Исправлено, спасибо. - person Joe Hildebrand; 18.02.2021
comment
большое спасибо, это очень полезно, это решает мою проблему - person Fa Thur; 26.02.2021