Regex เพื่อดึงข้อมูลระหว่างสตริง

Sep 23 2020

ฉันได้ลอง ff regex ด้านล่างแล้ว แต่ดูเหมือนจะไม่ได้ผล ฉันต้องการดึงข้อมูลระหว่าง F. Prepaids และ G. Initial Escrow Payment และรับผลลัพธ์ตัวอย่าง ff ด้านล่าง ขอบคุณ.

# regex ของฉัน

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

# สตริง

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

หากฉันได้รับข้อมูลระหว่างนั้นฉันต้องการให้ regex ได้ผลลัพธ์ ff ซึ่งข้อมูลอื่น ๆ รวมถึงบรรทัดใหม่ตาม strin ด้านบน

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

มีความคิดกับสิ่งนี้หรือไม่? ขอบคุณคุณ

คำตอบ

2 WiktorStribiżew Sep 23 2020 at 11:13

คุณอาจใช้

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

ดูการสาธิต regex

รายละเอียด

  • (?m) - เปิดโหมดมัลติไลน์
  • (?<=F\. Prepaids[\s\S]*?^\d+ )- จับคู่ตำแหน่งที่อยู่ข้างหน้าทันทีF. Prepaidsจากนั้นอักขระศูนย์หรือมากกว่าใด ๆ ให้น้อยที่สุดจากนั้นจึง 1+ หลักที่จุดเริ่มต้นของบรรทัดแล้วเว้นวรรค
  • [^\r\n]+ - อักขระใดตัวหนึ่งหรือมากกว่านอกเหนือจาก CR และ LF และ
  • (?:\r?\n[^\n\d][^\r\n]*)* - ลำดับที่เป็นศูนย์หรือมากกว่าของการสิ้นสุด CRLF หรือ LF, อักขระที่ไม่ใช่ตัวเลขและไม่ใช่ขึ้นบรรทัดใหม่จากนั้นจึงเป็นศูนย์หรือมากกว่าอักขระใด ๆ นอกเหนือจากการขึ้นบรรทัดใหม่และการส่งคืนการขนส่ง
  • (?=[\s\S]*?\nG\. Initial Escrow Payment) - ตำแหน่งปัจจุบันจะต้องตามด้วย
    • [\s\S]*? - อักขระใด ๆ ที่เป็นศูนย์หรือมากกว่านั้นให้น้อยที่สุด
    • \n - ขึ้นบรรทัดใหม่
    • G\. Initial Escrow Payment- G. Initial Escrow Paymentข้อความ