Совпадение всего после конца строки и до начала другой строки - PullRequest
1 голос
/ 22 апреля 2019

Я пытаюсь сопоставить все между двумя словами 1. AM в конце строки 2. DR в начале строки

Date:11/18/2016:9:39 AM
NIP CR/JUPITER, WHITE/GIN
DR Size:1200mb

С ожидаемым результатом -> NIP CR/JUPITER, WHITE/GIN

Мне удалось сделать это, используя комбинацию lookbehind и lookahead (?<=(?:AM|PM))[\s\S]*?(?=DR) однако это регулярное выражение не будет работать в некоторых сценариях, подобных этому ниже

Date:11/18/2016:9:39 AM
NIP CR/DRAIN, WHITE/GIN
DR Size:1200mb

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Во втором примере DR в дренаже. Вы можете добавить новую строку перед DR и, возможно, также добавить границу слова после DR\b, чтобы не быть частью большего слова:

(?<=(?:AM|PM))[\s\S]*?(?=\nDR)
                         ^^

Regex demo

Но также можно переместить перевод строки в положительный вид:

(?<=(?:AM|PM)\n).*(?=\nDR\b)

Regex demo

Вы также можете сопоставить AM с новой строкой, захватить следующую строку в группе захвата, а затем сопоставить новую строку и DR:

AM\n(.*)\nDR

Regex demo

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

RegEx 1

Этот RegEx может помочь вам сделать это, создав одну группу ($1), где находится ваша целевая линия.

AM\n(.+)\nDR

enter image description here

RegEx 2

Другой подход заключается в прямом назначении второй строки, например this RegEx

[A-Z]{3}\s[A-Z]+\/[A-Z]+.+ 

enter image description here

Вы также можете использовать группу () и вызывать ее, используя $1:

([A-Z]{3}\s[A-Z]+\/[A-Z]+.+) 

RegEx 3

Этот RegEx создает одну группу, добавляя дополнительные границы к шаблону:

([A-Z]{3}\s[A-Z]+\/[A-Z,]+\s[A-Z,\/]+)

enter image description here

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