Notepad ++ ค้นหาและแทนที่ regex: การแยกข้อมูลระหว่างวงเล็บข้ามหลายบรรทัดจากนั้นส่งคืนเอาต์พุตเป็นรูปแบบดั้งเดิม

ฉันกำลังดิ้นรนกับ Regex ใน Notepad ++ ฉันต้องดึงข้อมูลทั้งหมดระหว่างชุดวงเล็บในไฟล์ .txt ขนาดใหญ่จาก eQuest โดยจะลบส่วนที่เหลือออก ข้อความและจำนวนเต็มภายในวงเล็บจะครอบคลุมหลายบรรทัด สุดท้ายนี้ ฉันพยายามพิมพ์ข้อมูลภายในวงเล็บในบรรทัดของตัวเอง

นี่คือข้อมูลบางส่วน:

"EL1 Bldg Occup WD" = DAY-SCHEDULE_PD
    TYPE            = FRACTION
    VALUES          = [ 0, &D, &D, &D, 0, 0, 0.15, 0.3, 0.6, 0.9, 1, 0.85, 0.75, 0.8, 0.9, 0.8, 0.7, 0.6, 0.2, 0.1, 0, 0, 0, 0 ]
 ..
"EL1 Bldg Occup WEH" = DAY-SCHEDULE-PD
    TYPE             = FRACTION
    VALUES           = [ 0, &D, &D, &D, &D, &D, 0.1, &D, &D, &D, &D, &D, &D, 
     &D, &D, 0 ]
..
"EL1 Bldg InsLt WD" = DAY-SCHEDULE-PD
    TYPE             = FRACTION
    VALUES           = [ 0.1, &D, &D, &D, 0.1, 0.1, 0.5, 0.8, 0.85, 0.95, &D, 
     &D, &D, &D, &D, 0.8971, 0.8709, 0.6, 0.6, 0.3, 0.15, 0.15, 0.15, 
     0.15 ]
..
"EL1 Bldg InsLt Sat" = DAY-SCHEDULE-PD
    TYPE             = FRACTION
    VALUES           = [ 0.15, &D, &D, &D, &D, &D, 0.3, &D, &D, &D, &D, &D, &D, 
     &D, &D, 0.15 ]
..
"EL1 Bldg InsLt Sun" = DAY-SCHEDULE-PD
     TYPE             = FRACTION
     VALUES           = [ 0.15 ]
..
"EL1 Bldg InsLt HDD" = DAY-SCHEDULE-PD
     TYPE             = FRACTION
     VALUES           = [ 0 ]
..
"EL1 Bldg Misc WD" = DAY-SCHEDULE-PD
     TYPE             = FRACTION
     VALUES           = [ 0.2, &D, &D, &D, 0.2118, 0.3452, 0.7395, 0.8743, 
     0.8977, 0.9, &D, &D, &D, &D, &D, &D, &D, 0.8385, 0.5067, 0.3161, 
     0.2517, 0.2075, 0.2 ]
..
"EL1 Bldg Misc Sat" = DAY-SCHEDULE-PD
     TYPE             = FRACTION
     VALUES           = [ 0.2 ]
..

ผลลัพธ์ที่ฉันกำลังมองหามีดังนี้:

 0, &D, &D, &D, 0, 0, 0.15, 0.3, 0.6, 0.9, 1, 0.85, 0.75, 0.8, 0.9, 0.8, 0.7, 0.6, 0.2, 0.1, 0, 0, 0, 0 
 0, &D, &D, &D, &D, &D, 0.1, &D, &D, &D, &D, &D, &D, &D, &D, 0 
 0.1, &D, &D, &D, 0.1, 0.1, 0.5, 0.8, 0.85, 0.95, &D, &D, &D, &D, &D, 0.8971, 0.8709, 0.6, 0.6, 0.3, 0.15, 0.15, 0.15, 0.15 
 0.15, &D, &D, &D, &D, &D, 0.3, &D, &D, &D, &D, &D, &D, &D, &D, 0.15 
 0.15 
 0 
 0.2, &D, &D, &D, 0.2118, 0.3452, 0.7395, 0.8743, 0.8977, 0.9, &D, &D, &D, &D, &D, &D, &D, 0.8385, 0.5067, 0.3161, 0.2517, 0.2075, 0.2 
 0.2 

ขอบคุณ!


person Connor    schedule 27.01.2017    source แหล่งที่มา
comment
Notepad++ หรือ NoteBook++?   -  person Toto    schedule 28.01.2017
comment
Notepad++ ขอบคุณสำหรับการแก้ไข- แก้ไขชื่อเรื่อง   -  person Connor    schedule 30.01.2017


คำตอบ (1)


หากคุณไม่รังเกียจที่จะเรียกใช้ regexes สองสามรายการในชุดข้อมูล ก็ควรจะค่อนข้างง่าย ฉันไม่สามารถนึกถึงวิธีที่คุณสามารถเรียกใช้ regex เดียวเพื่อให้ได้ผลลัพธ์ที่แน่นอนที่คุณพยายามทำให้สำเร็จ

นิพจน์ทั่วไป 1

   Find what: ^.+?(\[[^\]]+\])?$
Replace with: $1

นิพจน์ทั่วไป 2

   Find what: (\r?\n)+
Replace with: \r\n

นิพจน์ทั่วไป 3

   Find what: ,\s*\r\n\s*
Replace with: , 

หมายเหตุ: การแทนที่ด้วยจะมีช่องว่างต่อท้าย ดังนั้นมันคือ `, "

นิพจน์ทั่วไป 4

   Find what: ^\[\s([^\]]+)\s\]
Replace with: $1

เอาต์พุตจากหลาย regexes

0, &D, &D, &D, 0, 0, 0.15, 0.3, 0.6, 0.9, 1, 0.85, 0.75, 0.8, 0.9, 0.8, 0.7, 0.6, 0.2, 0.1, 0, 0, 0, 0
0, &D, &D, &D, &D, &D, 0.1, &D, &D, &D, &D, &D, &D,&D, &D, 0
0.1, &D, &D, &D, 0.1, 0.1, 0.5, 0.8, 0.85, 0.95, &D,&D, &D, &D, &D, 0.8971, 0.8709, 0.6, 0.6, 0.3, 0.15, 0.15, 0.15,0.15
0.15, &D, &D, &D, &D, &D, 0.3, &D, &D, &D, &D, &D, &D,&D, &D, 0.15
0.15
0
0.2, &D, &D, &D, 0.2118, 0.3452, 0.7395, 0.8743,0.8977, 0.9, &D, &D, &D, &D, &D, &D, &D, 0.8385, 0.5067, 0.3161,0.2517, 0.2075, 0.2
0.2
person Nathan    schedule 28.01.2017
comment
หากคุณไม่สนใจความท้าทาย เป็นไปได้ไหมที่จะย้อนกลับกระบวนการนี้ ฉันกำลังวิเคราะห์และแก้ไขเอาต์พุตจาก Regrexes หลายรายการ และส่งคืนในรูปแบบเดียวกับเอาต์พุต ฉันจะเรียกใช้การค้นหาและแทนที่ Regrex เป็นรูปแบบที่แน่นอนจากข้อมูลต้นฉบับได้อย่างไร ฉันกำลังดิ้นรนกับการรักษารูปแบบข้อมูลเดิม...เพื่อให้ eQuest อ่านไฟล์อีกครั้งด้วยข้อมูลที่แทนที่ eQuest จะต้องคงข้อจำกัดการขึ้นบรรทัดใหม่จากสนิปข้อมูลต้นฉบับที่ฉันโพสต์ - person Connor; 30.01.2017
comment
ใช่ ฉันชอบความท้าทาย ฉันสมมติว่าคุณจะต้องค้นหา/แทนที่ฟิลด์ VALUES ขององค์ประกอบ EL1 Bldg โดยเฉพาะ สิ่งนี้จะต้องมีข้อมูลเพิ่มเติมเพื่อจัดเก็บในรูปแบบเอาต์พุต ดูเหมือนว่าจะมีค่าที่ซ้ำกัน และคุณจะแก้ไขค่าในระหว่างการวิเคราะห์ ซึ่งหมายความว่าเอาต์พุตของคุณจะแตกต่างไปจากฟิลด์ที่คุณต้องการแทนที่โดยสิ้นเชิง ดังนั้น ณ จุดนี้ ฉันจะเขียนโค้ดที่สามารถแยกวิเคราะห์รูปแบบและสร้างสตริงใหม่ได้ มีหลายวิธีในการแก้ไขปัญหานี้ แต่ขึ้นอยู่กับกฎเกณฑ์ทางธุรกิจของคุณสำหรับแนวทางที่ดีที่สุด - person Nathan; 31.01.2017
comment
หากเราสามารถจำกัดปัญหาเกี่ยวกับกฎเกณฑ์ทางธุรกิจได้ ก็อาจเป็นไปได้ที่จะดำเนินการกับ regex อย่างไรก็ตาม ฉันต้องดูว่าคุณจะบอกได้อย่างไรว่าเส้น x ไปกับองค์ประกอบ y ฉันสมมติว่าสิ่งนี้จะเสร็จสิ้นตามหมายเลขบรรทัด ซึ่งเป็นเหตุผลว่าทำไม parser ถึงเป็นแนวทางที่ดีกว่า/ง่ายกว่าในตอนนี้ - person Nathan; 31.01.2017
comment
ใช่ ฉันจะแทนที่ฟิลด์ค่ากลับตามลำดับที่มาพร้อมกับชุดค่าที่แก้ไขของฉัน มีโอกาสที่ค่าซ้ำกันในองค์ประกอบชื่อที่แตกต่างกันอาจมีเอาต์พุตค่าเดียวกันกับองค์ประกอบชื่ออื่นๆ ตามความเข้าใจของฉัน วิธีเดียวที่จะรู้ว่าฟิลด์ค่าใดที่ตรงกับชื่อคือลำดับในการนำเสนอ สุดท้าย ชุดค่าของฉันล้อมรอบด้วย () แทนที่จะเป็น [] ด้านบน ซึ่งเป็นวิธีที่ Equest อ่านไฟล์ และบรรทัดค่าจะจำกัดอยู่ที่ 79 อักขระก่อนที่จะย้ายไปยังบรรทัดถัดไป lmk หากคุณต้องการไฟล์จริงเพื่อดูว่าเกิดอะไรขึ้น - person Connor; 31.01.2017