Regex para extrair dados entre string

Sep 23 2020

Eu tentei o ff regex abaixo, mas não parece funcionar. Eu queria extrair dados entre F. Pré-pago e G. Pagamento de garantia inicial e obter o resultado de amostra ff abaixo. Obrigado.

#my regex

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

#Corda

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

Se eu obtiver os dados intermediários, também quero um regex para obter o resultado ff, que outros dados incluem novas linhas com base na strin acima.

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.)

Alguma ideia com este? Obrigado.

Respostas

2 WiktorStribiżew Sep 23 2020 at 11:13

Você pode usar

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

Veja a demonstração de regex

Detalhes

  • (?m) - modo multilinha ativado
  • (?<=F\. Prepaids[\s\S]*?^\d+ )- corresponde a um local imediatamente precedido por F. Prepaids, então, qualquer zero ou mais caracteres o mínimo possível, então 1+ dígitos no início de uma linha e, em seguida, um espaço
  • [^\r\n]+ - qualquer um ou mais caracteres diferentes de CR e LF e
  • (?:\r?\n[^\n\d][^\r\n]*)* - zero ou mais sequências de finalização CRLF ou LF, qualquer caractere diferente de dígito e não newline e, em seguida, qualquer zero ou mais caracteres diferentes de uma nova linha e retorno de carro
  • (?=[\s\S]*?\nG\. Initial Escrow Payment) - a localização atual deve ser seguida por
    • [\s\S]*? - qualquer zero ou mais caracteres, o mínimo possível
    • \n - uma nova linha
    • G\. Initial Escrow Payment- um G. Initial Escrow Paymenttexto.