Регулярное выражение для чисел фиг - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь написать некоторое регулярное выражение, чтобы соответствовать числам FIGI.

Числа FIGI имеют 12 символов и имеют следующую структуру:

  • Двухбуквенный префикс, исключая (BS, BM, GG, GB, GH, KY, VG)
  • G в качестве третьего символа
  • Восьмисимвольный буквенно-цифровой код c, не содержащий английских sh гласных букв "A", "E", "I", "O ", или" U "
  • Однократная проверка di git (0-9)

EG

BBG000BLNNV0 является действительным FIGI

У меня уже есть: ^([A-Z]{2})(G{1})(([A-Z]|\d){8})\d{1}

Но я не уверен, как добавить исключений , например, без учета каких-либо гласных и без учета этих указанных c буквенных комбинаций: BS, BM, GG, GB, GH, KY, VG

У кого-нибудь есть идеи? Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Вы бы написали исключения с отрицательным взглядом вперед / назад. Добавление простого отрицательного взгляда на двухбуквенный префикс к существующему регулярному выражению будет выглядеть следующим образом.

^(?!BS|BM|GG|GB|GH|KY|VG)([A-Z]{2})G(([A-Z]|\d){8})\d{1}

Но его можно немного сократить, сгруппировав несколько общих наборов

^(?!B[SM]|G[GBH]|KY|VG)([A-Z]{2})G(([A-Z]|\d){8})\d{1}

Я также сократил (G{1}) до G, потому что это то же самое, если только вам не нужна группа захвата. {1} не имел никакого эффекта.

Наконец, не гласные. Опять же, используя отрицательный взгляд и используя метасимвол \w (который является alphanumeri c плюс подчеркивание).

^(?!B[SM]|G[GBH]|KY|VG)([A-Z]{2})G((?![AEIOU_])\w){8}\d

Просто в стороне, вы можете заменить второй отрицательный взгляд на положительный взгляд, в сочетании с классом отрицанных символов.

^(?!B[SM]|G[GBH]|KY|VG)([A-Z]{2})G((?=[^AEIOU_])\w){8}\d
1 голос
/ 24 марта 2020

Вы можете использовать DEFINE как в:

(?(DEFINE)
    (?<prefix>(?:B[SM]|G[GBH]|KY|VG)(*SKIP)(*FAIL)|[A-Z]{2})
    (?<no_vowels>(?:(?![AEIOU])[A-Z0-9]){8})
    (?<digit>[0-9])
)
^
(?&prefix)
G
(?&no_vowels)
(?&digit)
$

См. демонстрацию на regex101.com .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...