Regex разбить строку на группы - PullRequest
1 голос
/ 02 октября 2019

У меня есть строка:

ABC/12345.DEF/ZYX.THIS IS THE REST OF THE STRING  

Мне нужно регулярное выражение, которое разбит это на 3 группы имен:

FIRST: 12345
SECOND: ZYX
THIRD: THIS IS THE REST OF THE STRING

Вот что я придумала:

(?=.*\bABC\/(?<FIRST>[\w\d\s,]*)\.\b)(?=.*\bDEF\/(?<SECOND>[\w])\b)(?<THIRD>[\w\W\s]*)

Это дает:

FIRST: 12345
SECOND: ZYX
THIRD: ABC/12345.DEF/ZYX.THIS IS THE REST OF THE STRING

Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 03 октября 2019

Ваше текущее регулярное выражение использует положительные взгляды прежде, чем оно достигнет третьей группы захвата - это (по иронии судьбы) заставляет его захватывать первую и вторую группы захвата в последней, третьей группе захвата. Вот пример, который не использует lookaheads.

ABC\/(?<FIRST>[^\.\n]+)\.DEF\/(?<SECOND>[^\.\n]+)\.(?<THIRD>.*)

  • ABC\/ Чтение ABC/
  • (?<FIRST>[^\.\n]+) Именованная группа захвата, которая захватываетвсе символы, кроме . или новой строки, до первого появления либо.
  • \.DEF\/ Чтение .DEF/
  • (?<SECOND>[^\.\n]+) То же, что и первая группа захвата.
  • \. Читать .
  • (?<THIRD>.*) Захватить все остальное.

Попробуйте здесь!

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