Как посмотреть в regex и найти конец нужной строки? - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь извлечь ссылочные идентификаторы из разных строк, где идентификатор ссылки может выглядеть совсем по-другому.Сложность, с которой я сталкиваюсь, заключается в том, как узнать, когда идентификатор ссылки закончен и обычный текст продолжается.

Примеры текста и регулярных выражений

текст Ссылка.027 / 7203,00 больше текста

- пример 2:

текст Реф.01 733 7720 4055-07 5 21 28FC больше текста

- пример 3: текст Реф.126281RBR Schoko больше текста

- пример 4: текст Реф.WAY101A.FT6141 Больше текста

- пример 5: Текст Ссылка.01 774 7699 4134-07 5 22 15FC Подробнее

Регулярное выражение: Ссылка?? ((?: [AZ \ d ./] +) ([A-Z0-9] +)? | (?: [\ D.] +))

Примеры 2,5.проиллюстрировать проблему получения остальной части идентификатора ссылки.

В примере 3,4 проиллюстрирована проблема с ложным положительным знаком в регулярном выражении другого слова. Schoko не является частью ref.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Вот один из способов сделать это, используя отрицательный взгляд с закаленной ленивой точкой:

Ref\.?\s+((?!\s+[^A-Z0-9])[A-Z0-9/. -])*(?= )

Демо

Этот паттернПредполагается, что ссылочные номера состоят только из цифр и заглавных букв.Логика здесь состоит в том, чтобы продолжать потреблять, пока то, что мы не видим впереди, - это пробел, за которым следует что-нибудь отличное , кроме числа или заглавной буквы.Заголовок (?= ) в конце также гарантирует, что шаблон останавливается после сопоставления самого последнего члена в ссылочном номере.

0 голосов
/ 22 декабря 2018

Для соответствия 2 различным форматам вы можете использовать одну группу захвата с чередованием :

Ref\. (\d+(?: \d+){2} \d+-\d+(?: \d+){2} [A-Z0-9]+|[A-Z0-9/.]+)

Объяснение

  • Ref\. совпадение Ref., За которым следует пробел
  • ( группа захвата
    • \d+(?: \d+){2} \d+-\d+(?: \d+){2} [A-Z0-9]+ шаблон сопоставления, например 01 733 7720 4055-07 5 21
    • | или
    • [A-Z0-9/.]+ Совпадение 1+ раз с любым классом персонажей
  • ) Закрыть группу захвата

Regex demo

Несколько более широким шаблоном может быть повторение цифр 1+ раз и дефиса и в конце совпадение с классом символов [A-Z0-9/.]+

Ref\. ((?:\d+(?: [\d-]+)+)*[A-Z0-9/.]+)

Regex demo

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