Regex: захватить строку и игнорировать определенный шаблон - PullRequest
0 голосов
/ 03 апреля 2019

Вот строка, с которой я борюсь, чтобы исключить определенный шаблон (| 2 Normal):

    #TR|1 Normal    Rationale|2 Normal  Yesterday I ate an apple.|2 Normal  Today, I have some work.|2 Normal   Tomorrow, I'm gonna eat Libanese food.

Я попробовал следующее выражение:

    \|\d+ [^\t]+\tRationale([^\|2 Normal]+)

Из того, что язнаете, последовательность ([^ \ | 2 Normal] +) должна записывать любой символ, который не соответствует «^ \ | 2 Normal», но на самом деле ничего не возвращает.

Ожидаемый результат:

Я хочу получить это как вывод:

"Вчера я съел яблоко. Сегодня у меня есть работа. Завтра яЯ буду есть ливанскую еду "

Или даже, если возможно, добавить разрыв строки между каждым предложением:

" Вчера я съел яблоко. "

"Сегодня у меня есть работа."

"Завтра я буду есть ливанскую еду."

Фактические результаты:

Если я введу это регулярное выражение:

   \|\d+ [^\t]+\tRationale([^\|2 Normal]+)

Это вышеприведенное регулярное выражение ничего не возвращает И это:

    \|\d+ [^\t]+\tRationale(.*)

Возвращает:

    |2 Normal   Yesterday I ate an apple.|2 Normal  Today, I have some work.|2 Normal   Tomorrow, I'm gonna eat Libanese food.

Любое решение?

Спасибо,

1 Ответ

0 голосов
/ 03 апреля 2019

Что вы можете сделать, это использовать чередование для сопоставления необязательного Обоснования или #TR, а при замене использовать новую строку:

(?:\s*(?:Rationale|#TR)?\|\d+ Normal\s+)+

Объяснение

  • (?: Группа без захвата
    • \s*(?:Rationale|#TR)? - сопоставить 0+ пробельных символов и либо обоснование, либо # TR
    • \|\d+ Normal\s+ - сопоставить |, 1+ цифр (или точно заменить цифрой 2), пробел и Normal, а затем 1+ раз символ пробела
  • )+ - Закрыть группу без захвата и повторить 1+ раз

Regex demo

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