Notepad ++ regex: แทนที่อัฒภาคค่าข้อความอย่างน้อยหนึ่งรายการด้วยเส้นประเมื่อเครื่องหมายอัฒภาคเป็นตัวคั่นฟิลด์


0

ฉันกำลังดิ้นรนเล็กน้อย ไฟล์ที่ฉันต้องการจัดการคือ csv ที่มีเครื่องหมายอัฒภาคเป็นตัวคั่นฟิลด์ ในชุดข้อมูลบางชุดมีการเพิ่มความคิดเห็นซึ่งรวมถึงเครื่องหมายอัฒภาค โชคดีที่ความคิดเห็นเหล่านี้เริ่มต้นและลงท้ายด้วย "

ตัวอย่าง:

;;;"sometext many words or few ; more text; even more text";;;;;;

ฉันต้องการแทนที่อัฒภาคทั้งหมดระหว่าง "แต่เก็บข้อความไว้ขอบคุณที่ช่วยฉัน

ชุดข้อมูลตัวอย่าง:

Before Regex find & Replace:  
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text ; text text";text;text;text;text;text;text;text;text;text

After Regex find & Replace:  
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text  

โปรดแบ่งปันตัวอย่างจากไฟล์ต้นฉบับและผลลัพธ์ที่คาดหวัง
Sandeep

หากเป้าหมายของคุณคือการโหลดไฟล์ csv ไปยัง excel ให้แก้ไขไฟล์ csv ด้วย notepad และเพิ่มแถวต่อไปนี้ไปที่จุดเริ่มต้น: sep=;ตอนนี้คุณสามารถโหลดลงใน excel ได้โดยไม่มีปัญหาใด ๆ
LPChip

@ LPChip: ขอบคุณมันใช้งานได้กับ excel-display แต่ผมจำเป็นต้องปกติสำหรับการนำเข้า DB ตารางมี 150k แถวต้องการโซลูชั่นที่ใช้ RegEx F & อา
สเวน

คุณอาจจะสามารถทำได้โดยปกติใน excel ก่อนจากนั้นค้นหา / แทนที่ในนั้น ฉันรู้ว่านี่ไม่ใช่คำตอบ แต่เป็นวิธีแก้ปัญหาและถ้าเป็นเพียงครั้งเดียวเท่านั้นมันอาจเป็นการหลบหนีของคุณ
LPChip

คำตอบ:


1
  • Ctrl+H
  • หาอะไร: "[^";]*\K;(?=[^";]*")
  • แทนที่ด้วย: _
  • ตรวจสอบล้อมรอบ
  • ตรวจสอบการแสดงออกปกติ
  • Replace all

คำอธิบาย:

"           : a double quote
[^";]*      : 0 or more any character that is not a double quote or a semicolumn
\K          : forget all we have seen until this position
;           : a semicolumn
(?=         : start lookahead, make sure we have, after current position,
  [^";]*    : 0 or more any character that is not a double quote or a semicolumn
  "         : a double quote
)           : ed lookahead

เปลี่ยน:

_       : an underscore

ตัวอย่างผลลัพธ์ที่ได้รับ:

Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text    

0

ในหน้าต่างแทนที่ระบุสิ่งต่อไปนี้:

  • หาอะไร: \"(.*?);(.*?)\"
  • แทนที่ด้วย: "\1_\2"
  • ตรวจสอบRegular Expressionสัญลักษณ์แสดงหัวข้อย่อยวิทยุ

สิ่งนี้จะแทนที่;ด้วย_ในความคิดเห็นที่มีหนึ่งอัฒภาค การแยก Regex:

  • \" - เริ่มการจับคู่จากเครื่องหมายคำพูดคู่
  • (.*?); - จับคู่ทุกอย่างจนกว่าจะถึงอัฒภาคแรก
  • (.*?)\" - จับคู่ทุกอย่างจนกระทั่งเครื่องหมายคำพูดคู่ถัดไป
  • "\1_\2"- การส่งออกที่ตรงกับคำพูดคู่และ subexpressions จับคู่ # 1 และ # 2 ในขณะที่การเปลี่ยนด้วย;_

หากเป็นไปได้ที่จะมีเครื่องหมายอัฒภาคหลายตัวในความคิดเห็นเพียงกดปุ่มReplace All(พร้อมกับWrap aroundตัวเลือกที่เลือก) - มันจะแทนที่หนึ่งอัฒภาคต่อความคิดเห็นในแต่ละครั้งจนกว่าจะเปลี่ยนเครื่องหมายอัฒภาคทั้งหมด

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