RegEx для игнорирования определенных границ - PullRequest
2 голосов
/ 07 мая 2019

Проблема

Я пытаюсь получить информацию из текстового файла, но я борюсь за получение содержимого поля «Обоснование»: Действительно, моя проблема заключается в том, чтоЯ хочу игнорировать шаблон: Список абзаца \ txx) с цифрой xa.Однако есть строки, начинающиеся с List Paragraph \ t (x) .Короче говоря, если символ сразу после абзаца списка \ t не является «(», я хочу игнорировать цифры xx) , но если после него следует «(», начинающий ловить сейчас. (см. раздел «Ожидаемые результаты» ниже)

Текст

List Paragraph  36) Rationale-1 - Details on the context:
List Paragraph  37) None.
Normal  
List Paragraph  38) 2 - Statement complements:
List Paragraph  39) Blablablabla
List Paragraph  (1) Blablablabla
List Paragraph  (2) Blablablabla
List Paragraph  (3) Blablablabla
List Paragraph  (4) Blablablabla
List Paragraph  (5) Blablablabla
List Paragraph  (6) Blablablabla
List Paragraph  (7) Blablablabla
Normal  
List Paragraph  40) Blablablabla
Normal  
List Paragraph  41) 3 - Statement justification:
List Paragraph  42) Blablablabla
Normal  
List Paragraph  43) Blablablabla
List Paragraph  44) Blablablabla
List Paragraph  45) Blablablabla
List Paragraph  46) Attached Files: Rationale-
Normal  

Сначала я улавливаю все, начиная сразу после «Rationale-» и до последнего символа перед «Абзацем списка»\ t46) Прикрепленные файлы: Обоснование - "с этим регулярным выражением:

^List\sParagraph\t\d+\)\sRationale-([\s\S]+?)(?=^List\sParagraph\t\d+\)\sAttached\sFiles:\sRationale-)

С этим у меня есть следующее:

1 - Details on the context:
List Paragraph  37) None.
Normal  
List Paragraph  38) 2 - Statement complements:
List Paragraph  39) Blablablabla
List Paragraph  (1) Blablablabla
List Paragraph  (2) Blablablabla
List Paragraph  (3) Blablablabla
List Paragraph  (4) Blablablabla
List Paragraph  (5) Blablablabla
List Paragraph  (6) Blablablabla
List Paragraph  (7) Blablablabla
Normal  
List Paragraph  40) Blablablabla
Normal  
List Paragraph  41) 3 - Statement justification:
List Paragraph  42) Blablablabla
Normal  
List Paragraph  43) Blablablabla
List Paragraph  44) Blablablabla
List Paragraph  45) Blablablabla

Теперь, я не знаю, с этого моментаКак получить ожидаемый результат ...

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

1 - Details on the context:
None.

2 - Statement complements:
Blablablabla
(1)Blablablabla
(2)Blablablabla
(3)Blablablabla
(4)Blablablabla
(5)Blablablabla
(6)Blablablabla
(7)Blablablabla 

Blablablabla

3 - Statement justification:
Blablablabla

Blablablabla
Blablablabla
Blablablabla

Как мне решить эту проблему?

1 Ответ

1 голос
/ 07 мая 2019

Одним из вариантов может быть выбрать все, что вы хотите, и заменить его пустой строкой:

^(?:.*?\bRationale-|Normal|List Paragraph\t(?:\d+\)[ \t]*)?)[ \t]*

Regex demo

  • ^ Начало строки
  • (?: Группа без захвата
    • .*?\bRationale- Совпадение 0+ раз с любым символом, кроме новой строки без жадности и совпадения границы слова и Rationale-
    • | или
    • Normal$ Соответствует нормальному и подтверждает конец строки
    • | или
    • List Paragraph\t Совпадение List Paragraph и табуляция
    • (?:\d+\)[ \t]*)? Необязательная часть, соответствующая 1+ цифрам, ), затем 0+ раз пробел или табуляция
  • ) Закрыть группу без захвата
  • [ \t]* Совпадение 0+ раз пробел или табуляция

Если вы хотите получить совпадение, вы можете захватить все, что последует в группе захвата, добавив (.*) в конец шаблона.

Regex demo

Если движок поддерживает \K, чтобы забыть то, что в данный момент совпало, вместо него можно добавить \K.*.

Regex demo

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