Regex เพื่อค้นหาเครื่องหมายจุลภาคยกเว้นเครื่องหมายจุลภาคภายในสตริงที่คั่นด้วยเครื่องหมายคำพูดคู่


3

ฉันต้องการจัดการไฟล์. csv แบบปิดโดยไม่เปิดผ่านปุ่มบน Excel AddIn ฉันสามารถทำตามทุกขั้นตอนได้ แต่มีปัญหากับการค้นหา regex ที่จะทำให้สำเร็จ (มีหลายคำตอบสำหรับคำถามที่คล้ายกันในเน็ตบนกระดานประกาศต่าง ๆ และไม่มีใครทำงานได้จริง

ต่อไปนี้เป็นตัวอย่างโค้ดพร้อมสิ่งที่โซลูชันควรมีลักษณะ:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันลองใช้ regexp หลายตัวแล้ว แต่ดูเหมือนจะไม่พบวิธีแก้ปัญหา ความพยายามที่ใกล้ที่สุดของฉันคือ:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันรู้สึกว่าต้องมีความเป็นไปได้ที่จะทำมัน ความช่วยเหลือเกี่ยวกับตำแหน่งที่ฉันจะผิดหรือเปล่า?


ปัญหาที่พบบ่อยมาก คุณจะไม่สามารถแก้ปัญหานี้ในคำสั่ง regex เดียว อาจเป็นไปได้โดยใช้ลำดับคู่ แต่ฉันไม่รู้สึกว่า Regex เป็นเครื่องมือที่ดีที่สุดของคุณที่จะใช้ที่นี่ AWK อาจเป็นตัวเลือกที่ดีกว่า และฉันรู้ว่ามีเครื่องมือฟรีอยู่ที่นั่นเพื่อจัดการกับ "CSV" ประเภทนี้ ... เพียงแค่หาลิงค์ไม่พบ
Wouter

คำตอบ:


1

คุณสามารถทำได้สองรอบ ก่อนเพื่อแทนที่เครื่องหมายจุลภาคที่ไม่มีเครื่องหมาย:

/(?!\B"[^"]*),(?![^"]*"\B)/\|/gm

Input                               Output
---------------------------------   ---------------------------------
aaa,bbb,ccc,"ddd,eee","fff,ggg"     aaa|bbb|ccc|"ddd,eee"|"fff,ggg"
"aaa,bbb",ccc,ddd,"eee,fff"         "aaa,bbb"|ccc|ddd|"eee,fff"
"aaa,bbb","ccc,ddd","eee,fff",ggg   "aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg

นี่คือตัวอย่างออนไลน์ของขั้นตอนแรก

จากนั้นการแทนที่ "โดยไม่มีสิ่งใดจะทำให้คุณได้ผลลัพธ์ที่ต้องการ:

/"//gm

Input                               Output
---------------------------------   ---------------------------------
aaa|bbb|ccc|"ddd,eee"|"fff,ggg"     aaa|bbb|ccc|ddd,eee|fff,ggg
"aaa,bbb"|ccc|ddd|"eee,fff"         aaa,bbb|ccc|ddd|eee,fff
"aaa,bbb"|"ccc,ddd"|"eee,fff"|ggg   aaa,bbb|ccc,ddd|eee,fff|ggg

และนี่คือตัวอย่างออนไลน์ของขั้นตอนที่สอง

นี้จะขึ้นอยู่กับคำตอบนี้บนกองมากเกิน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.