Regex захватывает все от начального слова до конечного указания c конечное слово - PullRequest
0 голосов
/ 22 января 2020

Я хотел бы захватить все, начиная с Session Appointment до тех пор, пока не будет найдено указанное c слово Billing

Session Appointment
Appointment Details
Date: XXXXX
Time: XXX am
Type: XXXXXX
Service: XXXXXX
Item: *XXXXXX*
Total price: XXXXX

Date: XXXX
Time: XXX am
Type:XXXX
Service: XXXX
Item: *XXXXXX*
Total price: XXXXX
Subtotal: XXXX
Discount: XXXX
Total: XXX
Booking Fee Amount XXX
Balance Amount XXXX
Summary
Status Amount
Deposit 
Pending payment XXX
Billing address Houston

Это то, что я использовал, но его единственный захват до Total:

Регулярное выражение: (Session Appointment[^B]+)(?=\n)

Ответы [ 3 ]

1 голос
/ 22 января 2020

Вы можете использовать

^Session\ Appointment
.+?
^Billing\ address

См. демонстрацию на regex101.com и учитывать различные модификаторы (multiline, singleline и verbose то есть).

1 голос
/ 22 января 2020

Причина, по которой шаблон (Session Appointment[^B]+)(?=\n) соответствует до Total: XXX, заключается в том, что следующая строка начинается с Booking.

[^B]+ соответствует любому символу, кроме B, а положительный прогноз (?=\n) утверждает, что прямо справа - это новая строка, которая относится к строке, начинающейся с Booking.

Если вы хотите сопоставить (обратите внимание, что для сопоставления только вам не нужна группа захвата), вы можете сопоставить все следующие строки, которые не начинаются с Billing:

^Session Appointment.*(?:\r?\n(?!Billing\b).*)*

Regex demo

Если вы также хотите сопоставить Billing, вы можете добавить \r?\nBilling после шаблон.

1 голос
/ 22 января 2020

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

(Session Appointment).*(Billing) должно соответствовать всем между Назначение сеанса и Биллинг . Однако вам нужно сопоставить несколько строк.

Настройте механизм регулярных выражений для соответствия новой строке с ..

https://regex101.com/r/paI7nT/1

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