ค้นหาและแทนที่ข้อความระหว่าง ^ และ ~ ใน Notepad ++


22

ฉันมีไฟล์ข้อความขนาดใหญ่ที่ฉันต้องการลบข้อความทั้งหมดระหว่างสัญลักษณ์ ^ และสัญลักษณ์ ~ สิ่งนี้ต้องทำงานข้ามสายเช่นกัน

ฉันพยายามทำการค้นหาและแทนที่อย่างสม่ำเสมอโดยใช้^*~ในกล่องค้นหาและไม่มีอะไรในกล่องแทนที่ แต่พบผลลัพธ์ 0 รายการ

คำตอบ:


24

ไม่สามารถทำได้ด้วยการค้นหาและแทนที่ปกติ หากคุณใช้ Notepad ++ 6 คุณสามารถใช้ประโยชน์จากเอ็นจิ้น regex ใหม่ที่รองรับPCRE ( แหล่งที่มา )

กดCtrl+ Hเพื่อเปิดกล่องโต้ตอบค้นหาและแทนที่และดำเนินการต่อไปนี้:

Find what:          \^.*?~
Replace with:       
Wrap around:        checked
Regular expression: selected
. matches newline:  checked

ตอนนี้กดAlt+ Aเพื่อแทนที่เหตุการณ์ทั้งหมด

การแสดงออกปกติในการค้นหาสิ่งที่ประกอบด้วยดังนี้:

  • \^เป็นตัวอักษร^
  • .*? คือจำนวนอักขระน้อยที่สุดที่อนุญาตให้นิพจน์ทั่วไปตรงกัน
  • ~เป็นตัวอักษร~

3
ถ้าคุณเปลี่ยน. *? ~ ถึง [^ ~] * ~ มันควรจะทำงานได้โดยไม่ต้องใช้ PCRE
barlop

1
@barlop: ฉันใช้การค้นหาและแทนที่เป็นโหมดการค้นหา: ปกติไม่ใช่การค้นหาและแทนที่โดยใช้นิพจน์ทั่วไป นั่นอาจเป็นความเข้าใจผิด ไม่ว่าในกรณีใดถ้าฉันจำได้อย่างถูกต้องเวอร์ชันก่อนหน้า 6 ไม่สนับสนุนรูปแบบหลายบรรทัด
เดนนิส

.*?รูปแบบการทำงานให้ฉันเพื่อค้นหาระหว่างตัวละครของและ; <ดังนั้นการค้นหาคือ FIND ;.*?<แทนที่;ด้วยตัวเลือกที่เลือกสำหรับRegular expressionและ. matches new line
SherlockSpreadsheets

8

คุณ gonna ต้องการค้นหาและให้แน่ใจว่า\^.*?~ เปิดใช้งานการจับคู่บรรทัดใหม่ :

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

นี่เป็นเพราะ^มีความหมายพิเศษมันตรงกับจุดเริ่มต้นของบรรทัด \^ดังนั้นเราจึงต้องหลบหนีด้วยเครื่องหมาย

การเขียน^*จะจับคู่ "จำนวนเริ่มต้นของบรรทัดในแถวใดก็ได้" .*ตรงกับ "ตัวละครใด ๆ " แต่ตามค่าเริ่มต้นแล้วจะไม่ตรงกับบรรทัดใหม่


2
ระวังพฤติกรรมโลภของ regex ถ้ามีหลาย~ตัวละคร (หรือ ie. หลายขีด) นี้จะตรงกับครั้งแรกที่ทุกทางไปที่ผ่านมา^ ~
หนัก

@heavyd <question> คุณแน่ใจหรือไม่ </question> เขาได้ใช้*?ที่ไม่ได้เป็นโลภก็ขี้เกียจ จะไม่ตรงกับมากกว่าหนึ่ง.*?~ ~ดังนั้นมันก็โอเค
barlop

@barlop: เขาแสดงความคิดเห็นไม่นานหลังจากที่ฉันตอบ มันเป็นนินจาแก้ไข
Der Hochstapler

2

ลองใช้ regex นี้ในส่วนค้นหา\^[^~]*~ เพื่อแทนที่ทุกอย่างระหว่าง ^ และ ~ รวมอยู่ด้วย


และสำหรับโดยเฉพาะฉันคิดว่าต้องใช้ PCRE จากนั้นทำบางสิ่ง (? <= ^) [^ ~] * (? = ~) ฉันไม่มี n ++ เพื่อทดสอบ butif ที่ล้มเหลวในการลองเปลี่ยน (? <= ^ ) ถึง (? <= \ ^)
barlop

^~สำหรับเฉพาะเพียงแทนที่ด้วย
เดนนิส

@Dennis ฉันหมายความว่าถ้าเขาต้องการแทนที่ทุกอย่างระหว่าง ^ และ ~ แต่ไม่รวมถึง ^ และ ~
barlop

1
ไม่ว่าสิ่งที่คุณจะได้รับถ้าคุณแทนที่\^[^~]*~ด้วย^~?
Dennis

@Dennis Oh ฉันเห็นสิ่งที่คุณหมายถึงจุดดี
barlop

0

ฉันมีข้อกำหนดทดแทนระหว่าง BETWEEN ที่คล้ายกันกับอักขระเริ่มต้นและสิ้นสุด สิ่งนี้มาจากอีเมลแนวโน้ม hundereds ของสมาชิกและฉันแค่อยากชื่อคนที่มีทุกอย่างที่ถอดออกระหว่างRemoveTextHere <>

เป็นต้นฉบับ

First1 Last1 <First1.Last1@email.com>; First2 Last2 <First2.Last2@email.com>; First3 Last3 <First3.Last3@email.com>; First4 Last4 <First4.Last4@email.com>;

เดนนิสได้ใกล้เคียงกับการแก้ปัญหาของฉันFind what: \^.*?~แต่ฉันมีการเปลี่ยนแปลงตัวละครที่แท้จริงของฉันแล้วฉันมีการลบทับแรกFind what: \<.*?>Find what: <.*?>

อัปเด Find what: <.*?>ตแล้ว; แทนที่ว่างเปล่า

First1 Last1 ; First2 Last2 ; First3 Last3 ; First4 Last4

_

อักขระพิเศษ : *, $, \, +, ^, (และ), [, ], {และ}

อักขระพิเศษจะมีการอธิบายโดยเจอร์รีเยเรมีย์ที่นี่/programming/37742519/notepad-wildcard


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