Regex для идентификации идентификатора медицинского бенефициара (MBI) в python

Поэтому я пытаюсь создать регулярное выражение для MBI (идентификаторы медицинских бенефициаров) в python, и мои регулярные выражения не будут работать.

Любой пример MBi: 1EG4-TE5-MK73

Вот формат для MBI:

  • 11-персонажи

  • 2-й, 5-й, 8-й и 9-й символы MBI всегда будут буквой.

  • Символы 1, 4, 7, 10 и 11 всегда будут цифрами.

Я пытался использовать следующее регулярное выражение, но безрезультатно:

mbi=re.compile(r"[1-9]{1}[^SLOIBZsloibz|^0-9]{1}[^SLOIBZsloibz]{1}[0-9]{1}-?[^SLOIBZsloibz|^0-9]{1}[^SLOIBZsloibz]{1}[0-9]{1}-?[^SLOIBZsloibz|^0-9]{1}[^SLOIBZsloibz|^0-9]{1}[0-9]{1}[0-9]{1}")

Какие-либо предложения?!?!

2 ответа

Решение

Вот формат для MBI:

  1. 11-персонажи
  2. 2-й, 5-й, 8-й и 9-й символы MBI всегда будут буквой.
  3. Символы 1, 4, 7, 10 и 11 всегда будут цифрами.

Там нет упоминания о 3-м и 6-м символах, но на основе вашего примера вы можете использовать регулярные выражения, такие как:

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

Regex Demo


Regex Объяснение:

Итак, основываясь на вашем регулярном выражении, некоторые вещи, которые вы пытались сделать, были синтаксически неправильными. Количественная оценка через фигурные скобки не требуется, если вы хотите, чтобы это происходило только один раз, из-за чего {1} становится излишним. Итак, я удалил эту часть из вашего регулярного выражения. Вторая вещь в вашем наборе символов,

[^SLOIBZsloibz|^0-9]

как я вижу, вы хотите отрицать некоторые алфавиты и 0-9 цифр. Вам не нужно применять чередование, когда вы используете набор символов [], Помимо отрицания этих алфавитов в вашем наборе символов, если вы также хотите отрицать число 0-9, вы просто должны поместить его туда, и ваш правильный правильный набор символов станет,

[^SLOIBZsloibz0-9]

После применения этих исправлений в вашем регулярном выражении ваше регулярное выражение становится этим, и это то, что вам нужно, я думаю.

^[1-9][^SLOIBZsloibz0-9][^SLOIBZsloibz][0-9]-?[^SLOIBZsloibz0-9][^SLOIBZsloibz][0-9]-?[^SLOIBZsloibz0-9][^SLOIBZsloibz0-9][0-9][0-9]$

демонстрация

Дайте мне знать, если это хорошо для вас.

Я добавил несколько \\- поэтому он не будет считать хеш допустимым буквенно-цифровым символом.

^[1-9][^SLOIBZsloibz0-9][^SLOIBZsloibz][0-9]-?[^SLOIBZsloibz0-9\\-][^SLOIBZsloibz\\-][0-9]-?[^SLOIBZsloibz0-9\\-][^SLOIBZsloibz0-9\\-][0-9][0-9]$
Другие вопросы по тегам