Regex untuk mengekstrak data di antara string

Sep 23 2020

Saya sudah mencoba ff regex di bawah ini tetapi tampaknya tidak berhasil. Saya ingin mengekstrak data antara F. Prepaids dan G. Pembayaran Escrow Awal dan mendapatkan contoh hasil ff di bawah ini. Terima kasih.

#regex saya

(?<=F. Prepaids)[\S\s]*?(?= G. Initial Escrow Payment)

#Tali

F. Prepaids $887.01 01 Homeowner's Insurance Premium ( 12 mo.) toAmerican Family $893.00
Insura
02 Mortgage Insurance Premium (     mo.)
03 Prepaid Interest ($5.99 per day from 10/02/2020 to 10/01/2020) -$5.99
04 Property Taxes (     mo.)
05
06
07
08
G. Initial Escrow Payment at Closing $3,776.11

Jika saya mendapatkan data di antara saya juga ingin regex mendapatkan hasil ff yang data lain menyertakan baris baru berdasarkan strin di atas.

Homeowner's Insurance Premium ( 12 mo.) to American Family Insura
Mortgage Insurance Premium ( mo.)
Prepaid Interest ($5.99 per day from 10/02/2020 to 10/01/2020)
Property Taxes (     mo.)

Ada ide dengan yang satu ini? Terima kasih.

Jawaban

2 WiktorStribiżew Sep 23 2020 at 11:13

Anda dapat menggunakan

(?m)(?<=F\. Prepaids[\s\S]*?^\d+ )[^\r\n]+(?:\r?\n[^\n\d][^\r\n]*)?(?=[\s\S]*?\nG\. Initial Escrow Payment)

Lihat demo regex

Detail

  • (?m) - mode multiline aktif
  • (?<=F\. Prepaids[\s\S]*?^\d+ )- cocokkan lokasi yang diawali dengan F. Prepaids, kemudian karakter nol atau lebih sesedikit mungkin, lalu 1+ digit di awal baris dan kemudian spasi
  • [^\r\n]+ - satu atau lebih karakter selain CR dan LF dan
  • (?:\r?\n[^\n\d][^\r\n]*)* - nol atau lebih urutan CRLF atau akhiran LF, karakter non-digit dan non-baris baru dan kemudian karakter nol atau lebih selain baris baru dan carriage return
  • (?=[\s\S]*?\nG\. Initial Escrow Payment) - lokasi saat ini harus diikuti dengan
    • [\s\S]*? - sesedikit mungkin karakter nol atau lebih
    • \n - baris baru
    • G\. Initial Escrow Payment- G. Initial Escrow Paymentteks.