Обновление моего регулярного выражения для добавления точек и дефисов - PullRequest
0 голосов
/ 23 марта 2020

Мой код регулярного выражения [A-Z]{1,}\d{3,}\w? отлично работает, возвращая строки, такие как CX3623, M3326, Y2362, но я также хочу иметь возможность возвращать строки в следующем формате:

YH321-2
V2021/V2022
1.2A-2351
YGH256-4268

Что я должен добавить к регулярное выражение?

Демо: https://regex101.com/r/MjPkFh/2

1 Ответ

0 голосов
/ 23 марта 2020

Для первой части вы можете сопоставить различные форматы, используя чередование .

Вы можете сделать вторую часть необязательной, используя необязательную группу без захвата (?:...)? и сопоставить либо / или -, за которыми могут следовать символы AZ и цифры 1+.

\b(?:[A-Z]+ )?(?:[A-Z]*\d{3,}|\d+(?:\.\d+)?[A-Z]+)(?:[\/-][A-Z]*\d+)?\b

Пояснение

  • \b Граница слова
  • (?:[A-Z]+ )? По выбору соответствует 1+ символов AZ, за которым следует пробел
  • (?: Группа без захвата
    • [A-Z]*\d{3,} Соответствует 0+ раз AZ и 3 или более цифр
    • | или
    • \d+(?:\.\d+)?[A-Z]+ Совпадение 1+ цифр с необязательной десятичной частью и 1+ раз AZ
  • ) Закрыть группу
  • (?: Группа без захвата
    • [\/-][A-Z]*\d+ Совпадение либо / или -, 0+ раз AZ и 1+ цифры
  • )? Закройте группу и сделайте необязательным
  • \b Граница слова

Regex demo

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