วิธีลบคำที่ซ้ำกันทั้งหมดในทุกบรรทัดโดยใช้ Notepad ++


11

ฉันกำลังทำงานกับไฟล์ที่มีบรรทัดคำหลักและบางบรรทัดมีคำหลักที่ซ้ำ

ตัวอย่างเช่น:

dangerous,dangerous,hazardous,perilous

ฉันต้องการบอก Notepad ++ ว่าฉันต้องการลบคำที่ซ้ำกันทุกบรรทัด สำหรับตัวอย่างนี้dangerous,จะถูกลบ:

dangerous,hazardous,perilous

ฉันมีหลายบรรทัดเช่นนั้นและนั่นคือเหตุผลที่ฉันกำลังมองหาวิธีอัตโนมัติในการทำเช่นนี้


1
เกี่ยวกับdangerous,hazardous,dangerous,perilousอะไร ในคำอื่น ๆ คำที่ซ้ำกันอยู่ติดกันหรือไม่
Daniel Beck

คำตอบ:


10

คุณสามารถใช้นิพจน์ทั่วไปเพื่อลบคำที่ซ้ำกันติดกันในบรรทัด แต่ฉันไม่คิดว่าเป็นไปได้ที่จะลบคำที่ซ้ำซึ่งไม่ต่อเนื่องกัน (เช่นdangerous, hazardous, dangerous)

ใช้ regex นี้ในหน้าต่างแทนที่ใน Notepad ++ และอย่าลืมเลือก "นิพจน์ปกติ" เป็นตัวเลือกโหมดการค้นหาด้านล่าง:

regex นี้จะลบคำซ้ำทั้งหมดติดต่อกัน - ไม่ว่าจะเป็น 2 คำซ้ำหรือ 10 \b(\w+)(?:,\s+\1\b)+คำซ้ำติดต่อกัน:

regex ที่ไม่ใช่เครื่องหมายจุลภาคที่แน่นอนจะเป็น: \b(\w+)(?:\s+\1\b)+(อาจเป็นประโยชน์สำหรับผู้ใช้รายอื่น)

หากคุณต้องการ regex เฉพาะเพียงสองคำที่ซ้ำกัน (คู่) ให้ใช้ regex (\b\w+\b)\W+\1นี้:

วาง regex นี้ในการแทนที่ด้วยกล่องเก็บหนึ่งเกิดขึ้นของคำว่า ${1}(มิฉะนั้นคำซ้ำทั้งหมดจะถูกลบออก):

นิพจน์ทั่วไปเหล่านี้จะแก้ไขสถานการณ์เช่นเดียวกับที่คุณอธิบายไว้ในคำถามของคุณเป็นตัวอย่าง regex แรกจะทำงานได้กับทุกคำที่ซ้ำกัน (เช่นdangerous, dangerous, dangerous, dangerous, hazardous) ในขณะที่รุ่นที่สองจะใช้ได้กับคำที่ซ้ำกันสองคำเท่านั้น (เช่นdangerous, dangerous, hazardous)

หมายเหตุ:การแสดงออกปกติจะนำไปใช้กับรูปแบบที่อธิบายไว้ในคำถามที่มีความหมายว่ารูปแบบเช่นtwo words, two words, anotherword, two-words, two-words, anotherword, three words expression, three words expression, anotherwordจะไม่เปลี่ยนแปลงเพราะ regex จะไม่นำไปใช้กับพวกเขา


ขอบคุณสำหรับความช่วยเหลือ! อย่างไรก็ตามฉันได้รับ 0 เหตุการณ์ฉันพยายามทำสิ่งนี้ด้วยคำหลักที่แยกกันตามที่คุณแนะนำและมันไม่ทำงานฉันก็ลองเหมือนที่เคยทำมาก่อนและไม่มีอะไรโปรดตรวจสอบการจับภาพหน้าจอของฉัน: goo.gl/eZ7Kp
Gabriel

regex นี้ควรใช้งานได้: (\b\w+\b)\W+\1สำหรับคำที่ซ้ำกันสองคำ ฉันจะแก้ไขคำตอบของฉัน เครื่องหมายจุลภาคคือสาเหตุที่ regex อื่นไม่ทำงาน
amiregelz

ฉันลองชุดค่าผสมที่เป็นไปได้ทั้งหมดไม่มีเครื่องหมายจุลภาคช่องว่างเท่านั้นไม่มีช่องว่างและเครื่องหมายจุลภาค แต่ยังไม่มีอะไร กรุณาให้ความกระจ่างแก่ฉันนี่คือไฟล์ข้อความ: goo.gl/sP20z
Gabriel

ปัญหาคือว่าการแสดงออกปกติผมเขียนไว้ในคำตอบของฉันจะใช้กับรูปแบบ (ผมคิดว่า) word, word, anotherwordคุณถาม: อย่างไรก็ตามคุณมีหลายกรณีที่แตกต่างกันเล็กน้อยเช่นcame across, came acrossและบางคำมี 3 หรือ 4 คำ นอกจากนี้ยังมีคำที่มีความ'เหมือนdon'tและมันทำให้สิ่งที่ซับซ้อนมากขึ้นในNotepad ++ ระบบ ระบบ regex Notepad ++ ค่อนข้างน่ารำคาญและ จำกัด เช่นกันดังนั้นการแก้ปัญหาคือใช้ regex ใน python (หรือภาษาอื่น) หรือสร้างนิพจน์ทั่วไปเฉพาะรูปแบบสำหรับ Notepad ++
amiregelz

ปัญหาอีกประการหนึ่งคือคำที่ซ้ำกันส่วนใหญ่จะปรากฏในบรรทัดก่อนหน้าซึ่งทำให้ยากต่อการบรรลุเป้าหมายของคุณ หากคุณต้องการลบคำที่ซ้ำกันออกไปทั้งหมดนั้นก็ไม่ยาก คุณสามารถทำอะไรเช่นนี้และนี้ ฉันขอแนะนำให้คุณใช้นิพจน์ทั่วไปเฉพาะใน Notepad ++ (ฉันสามารถช่วยคุณได้เพียงบอกรูปแบบทั้งหมดของคำที่ซ้ำกัน) หรือพิจารณาแนวทางที่แตกต่างสำหรับปัญหาของคุณ
amiregelz

1

นี่คือวิธีในการทำงานสิ่งนี้จะแทนที่คำที่ซ้ำกันทั้งหมดแม้ว่าจะไม่ต่อเนื่องกัน:

  • Ctrl+H
  • หาอะไร: (?:^|\G)(\b\w+\b),?(?=.*\1)
  • แทนที่ด้วย: LEAVE EMPTY
  • ตรวจสอบล้อมรอบ
  • ตรวจสอบการแสดงออกปกติ
  • อย่าตรวจสอบ . matches newline
  • Replace all

คำอธิบาย:

(?:^|\G)    : non capture group, beginning of line or position of last match
(\b\w+\b)   : group 1, 1 or more word character (ie. [a-zA-Z0-9_]), surrounded by word boundaries
,?          : optional comma
(?=.*\1)    : positive lookahead, check if thhere is the same word (contained in group 1) somewhere after

รับอินพุตเหมือน: dangerous,dangerous,hazardous,perilous,dangerous,dangerous,hazardous,perilous

เราได้รับ:

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