Кто-нибудь как узнать подстроку в регулярном выражении? В настоящее время я выполняю профилирование данных и вижу другой формат, такой как:

EB0000000

EB00000000PHL00000000F00000000

P0000000A

Когда я использовал свое выражение: \b(?:[A-Z]{1}\d{7}[A-Z]{1}|[A-Z]{1}\d{7,8}|[A-Z]{2}\d{6}|[A-Z]{2}\d{7,8})\b

Я захватил первый и последний образец, но второй выглядит некорректно, но я все еще хочу захватить EB и эти 8 цифр перед PHL. Возможно ли это в регулярном выражении? ТИА

1
JL Delos Reyes 27 Апр 2020 в 09:09

2 ответа

Лучший ответ

Почему так сложно писать? Может быть, рядом есть строки, которые не должны попадать в выделение?

\b[A-Z\d]{8,}\b
1
Dmitriy 27 Апр 2020 в 06:41

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

Обратите внимание, что вы можете опустить {1}

\b(?:[A-Z]{2}\d{7,8}|[A-Z]\d{7}[A-Z]|[A-Z]\d{7,8}|[A-Z]{2}\d{6})

По частям

  • \b Граница слова
  • (?: Группа без захвата < UL>
  • [A-Z]{2}\d{7,8} Сопоставьте 2 раза A-Z и 7-8 цифрам
  • | или
  • [A-Z]\d{7}[A-Z] Соответствие A-Z, 7 цифрам и A-Z
  • | или
  • [A-Z]\d{7,8} Соответствует A-Z и 7-8 цифрам
  • | или
  • [A-Z]{2}\d{6} Сопоставить 2 раза A-Z и 6 цифрам
  • ) Закрыть группу
  • Regex demo

    1
    The fourth bird 27 Апр 2020 в 07:01