Регулярное выражение: вывод между двумя конкретными словами - PullRequest
0 голосов
/ 25 марта 2019

Текст:

ITEM 1A.    RISK FACTORS 

    The following is a description of the principal risks inherent in our business.

ITEM 1B.    UNRESOLVED STAFF COMMENTS 

    Not Applicable.

Регулярное выражение:

(?<=RISK).*

Получил это:

ITEM 1A.    RISK **FACTORS** 

    The following is a description of the principal risks inherent in our business.

ITEM 1B.    UNRESOLVED STAFF COMMENTS 

    Not Applicable.

Ожидается:

ITEM 1A.    RISK **FACTORS

    The following is a description of the principal risks inherent in our business.

ITEM 1B.    UNRESOLVED STAFF COMMENTS 

    Not Applicable.**

Как можноЯ получаю весь текст после слова РИСК и перед словом ПУНКТ 1B

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Должен работать следующий шаблон:

(?<=RISK)(.*?)(?=ITEM 1B)

Обратите внимание, что в демоверсии ниже я использую режим DOT ALL. Это означает, что .* может совпадать с новой строкой, что вам и нужно.

Демо

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

Если ваш вариант регулярного выражения не поддерживает DOT ALL, то одним из возможных обходных путей является использование [\s\S]*:

(?<=RISK)([\s\S]*?)(?=ITEM 1B)
0 голосов
/ 25 марта 2019

Вы можете сделать это, не требуя использования модификатора RegEx s (точка все):

(?<=RISK)([\W\w]*)(?=ITEM 1B)

Демо здесь: https://regex101.com/r/ZUKZxy/4

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