คุณจะลบอักขระเฉพาะระหว่างคำสองคำได้อย่างไร


1

ฉันกำลังมองหาที่จะทำต่อไปนี้ ฉันมีสิ่งเหล่านี้ 1400+ สิ่งที่ต้องทำ

Application=M:\8TB+\GOG.Com\99_Levels_To_Hell\Launch_99_Levels_To_Hell.Lnk
WorkingFolder=M:\8TB+\GOG.Com\99_Levels_To_Hell\

ExitMethod=WinClose

ฉันต้องการที่จะทำให้มัน

Application=M:\8TB+\GOG.Com\99_Levels_To_Hell\Launch 99 Levels To Hell.Lnk
WorkingFolder=M:\8TB+\GOG.Com\99_Levels_To_Hell\

ExitMethod=WinClose

ฉันต้องการกำหนดเป้าหมายส่วนระหว่าง "เรียกใช้" และ "Lnk" เท่านั้น การลบทั้งหมด _ ในระหว่าง.

มีวิธีการทำเช่นนี้?


ฉันใกล้ชิดมากขึ้น หากมีวิธีการเลือกบรรทัดที่ทำเครื่องหมายไว้ทั้งหมดฉันก็จะได้รับมัน ป่วยเพียงใช้คุณสมบัติแทนที่ด้วยที่เลือก
Christopher Shaw

เป็นเพียงส่วนสุดท้ายที่คุณต้องการลบขีดล่างออกหรือไม่
bertieb

คำตอบ:


1

ฉันจะแทนที่อักขระในส่วนสุดท้ายของเส้นทางเฉพาะในบรรทัดที่ระบุโดยใช้ Notepad ++ ได้อย่างไร

วิธีที่ดีที่สุดและเป็นไปได้เพียงอย่างเดียวคือ regex สิ่งนี้ใช้เวลาคิดเล็กน้อย แต่สิ่งต่อไปนี้ควรใช้งานได้:

ค้นหา : (?<!\\)(?!.*\\)_(?=.*Lnk)

แทนที่ด้วย :

(อักขระเว้นวรรค↑)

(ในปัจจุบัน / เอกสารทั้งหมด NB: ' 'คืออักขระเว้นวรรค)

คำอธิบาย

  • เพื่อให้ตรงกับชิ้นส่วน หลังจากแบ็กสแลชสุดท้าย เรารวมการมองเชิงลบเข้าด้วยกันกับการมองเชิงลบ: (?<!\\)(?!.*\\).

    (ฉันยอมรับว่าส่วนนี้เป็นเวทย์มนตร์สีดำเล็กน้อยซึ่งฉันก็ยังไม่เข้าใจ - \ ข้างหลังและไม่ \ ตามด้วยตัวอักษรใด ๆ ข้างหน้า?)

  • ตรงกับขีดล่าง: _

  • คุณต้องการจับคู่เฉพาะบรรทัดที่ตรงกับ Application ทางลัดดังนั้นเราจึงมั่นใจว่า บรรทัดลงท้ายด้วย ' Lnk ' โดยใช้ lookahead เชิงลบ: (?=.*Lnk)

สรุป

ดังนั้นทั้งหมดมัน ตรงกับขีดล่าง แต่เท่านั้น หลังจากแบ็กสแลชสุดท้าย และ เฉพาะบรรทัดที่ลงท้ายด้วย 'Lnk' . นั่นคือ, (?<!\\)(?!.*\\)_(?=.*Lnk)

การสาธิต

regex in action

ลองใช้ใน regex101!


ฉันสามารถใช้บรรทัดที่คุณให้ไว้เท่านั้น แต่หากพวกเขาเป็นไปตามสมมติฐานเหล่านั้น (ทำงานในส่วนสุดท้ายหลังจากแบ็กสแลชขีดล่างและลงท้ายด้วย 'Lnk') มันควรจะทำงานได้ดีสำหรับบรรทัดอื่นเช่นกัน

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