ค้นหาและแทนที่ - เพิ่มการขึ้นบรรทัดใหม่หรือขึ้นบรรทัดใหม่


183

ในกรณีของสตริงต่อไปนี้ที่จะแยกวิเคราะห์

ford mustang,10,blue~~?bugatti veyron,13,black

ฉันต้องการแทนที่~~?ด้วยcarriage return

แทนที่ด้วย\nเพียงแค่เพิ่มสตริง"\n"

สิ่งนี้สามารถทำได้?

คำตอบ:


272

ตรวจสอบให้แน่ใจว่าได้เลือก "ใช้: นิพจน์ปกติ" ในกล่องโต้ตอบค้นหาและแทนที่:

ค้นหา / แทนที่กล่องโต้ตอบใช้การแสดงออกปกติ

โปรดทราบว่าสำหรับ Visual Studio 2010 สิ่งนี้จะไม่ทำงานในส่วนขยาย "Quick Find" เครื่องมือค้นหาVisual Studio (ในการปรับปรุงเดือนกรกฎาคม 2554) คุณจะต้องใช้กล่องโต้ตอบค้นหาและแทนที่แบบเต็ม (ใช้ Ctrl + Shift + H หรือแก้ไข -> ค้นหาและแทนที่ -> แทนที่ในไฟล์) และเปลี่ยนขอบเขตเป็น "เอกสารปัจจุบัน"


5
ใช้ปุ่ม "เล่น" ทางด้านขวาของข้อความค้นหาก็มีประโยชน์เช่นกัน
Cel

3
และหากคุณกำลังพยายามจับคู่อักขระพิเศษเช่นวงเล็บอย่าลืมใช้เช่น\)เมื่อมีนิพจน์ทั่วไปอยู่ ...
Cel

2
?ตัวละครจะต้องมีการหลบหนีใน Regex เพราะมันหมายความว่าองค์ประกอบที่ก่อนหน้านี้จะเป็นตัวเลือก ดังนั้นข้อความ "ค้นหาสิ่งที่" ที่ถูกต้องคือ~~\?มีเครื่องหมายคำถามที่หลบหนีโดยแบ็กสแลช คำตอบที่คุณให้ไว้กับข้อความตัวอย่างเพราะมันจะหาตัวหนอนตัวที่สองและกินมันอย่างตะกละตะกลาม แต่ถ้าตัวหนอนตัวเดียวมีอยู่ในข้อความทุกที่มันจะถูกแทนที่ด้วยบรรทัดใหม่อย่างไม่เหมาะสม
ErikE

หากติดตั้งเครื่องมือเพิ่มประสิทธิภาพการผลิตคุณยังคงสามารถทำ ctrl + shit + h จากนั้น ctrl + h เพื่อเปิดหน้าต่างค้นหา / แทนที่ Native Visual Studio
เนบิวลา

ควรสังเกตว่าถ้าเลือก "ใช้นิพจน์ปกติ" คุณสามารถใช้ "\ n" เพื่อค้นหา (และแทนที่) บรรทัดใหม่ได้เช่นกัน
Jacob Lockard

28

นอกจากนี้คุณยังสามารถลอง\x0d\x0aในกล่อง "แทนที่ด้วย" พร้อมกับ "ใช้การแสดงออกปกติ" ที่ทำเครื่องหมายไว้เพื่อรับการขึ้นบรรทัดใหม่ + บรรทัดการป้อนโดยใช้ Visual Studio Find / Replace การใช้\n(ตัวดึงข้อมูลบรรทัด) เหมือนกับ\x0a


13

หากคุณตั้งค่าสถานะ "ใช้การแสดงออกปกติ" จะมีการแปล \ n แต่โปรดจำไว้ว่าคุณจะต้องแก้ไขข้อความค้นหาของคุณเพื่อให้เป็นมิตรกับ regexp ในกรณีของคุณควรจะหนีแบบนี้ "\ ~ \ ~ \?" (ไม่มีเครื่องหมายคำพูด)


3
'~' ไม่จำเป็นต้องถูกหลบหนีใน Regex มันเป็นตัวอักษรที่แท้จริง สิ่งนี้ไม่ถูกต้อง
ErikE

12

หากคุณต้องการหลีกเลี่ยงความยุ่งยากในการหลีกเลี่ยงอักขระพิเศษในสตริงการค้นหาและการแทนที่ของคุณเมื่อใช้นิพจน์ทั่วไปให้ทำตามขั้นตอนต่อไปนี้:

  1. ค้นหาสายเดิมของคุณและแทนที่ด้วย "UniqueString42" กับการแสดงออกปกติปิด
  2. ค้นหา "UniqueString42" และแทนที่ด้วย "UniqueString42 \ nUniqueString1337" ด้วยนิพจน์ทั่วไปบน
  3. ค้นหา "UniqueString42" และแทนที่ด้วยบรรทัดแรกของการเปลี่ยนทดแทน (มักจะสายเดิมของคุณ) มีการแสดงออกปกติปิด
  4. ค้นหา "UniqueString42" และแทนที่ด้วยบรรทัดที่สองของการทดแทนของคุณมีการแสดงออกปกติปิด

โปรดทราบว่าแม้ว่าคุณต้องการพิชที่ตรงกันด้วยตนเองสำหรับการค้นหาและแทนที่ครั้งแรกคุณสามารถใช้ "replace all" สำหรับสามขั้นตอนสุดท้ายได้อย่างปลอดภัย

ตัวอย่าง

ตัวอย่างเช่นหากคุณต้องการแทนที่สิ่งนี้:

public IFoo SomeField { get { return this.SomeField; } }

กับที่:

public IFoo Foo { get { return this.MyFoo; } }
public IBar Bar { get { return this.MyBar; } }

คุณจะทำการทดแทนดังต่อไปนี้:

  1. public IFoo SomeField { get { return this.SomeField; } }XOXOXOXO( ปิด regex )
  2. XOXOXOXOXOXOXOXO\nHUHUHUHU(regex บน )
  3. XOXOXOXOpublic IFoo Foo { get { return this.MyFoo; } }( ปิด regex )
  4. HUHUHUHUpublic IFoo Bar { get { return this.MyBar; } }( ปิด regex )

@Alex หากคุณมีทางออกในทางปฏิบัติสำหรับปัญหานี้ซึ่งจะช่วยให้ไม่ต้องออกจากการค้นหาและแทนที่ข้อความด้วยตนเองเมื่อเปลี่ยนเป็นนิพจน์ทั่วไปและใช้เวลา 10 นาทีในการแก้ไขสัตว์ประหลาดที่สร้างขึ้นมาฉันดีใจมากที่ได้ยิน มันเนื่องจากคำตอบของฉันเป็นเพียงการแฮ็กที่น่าเกลียด แต่อย่างที่คุณเห็นคำตอบอื่น ๆ ทั้งหมดที่ทำงานบนวานิลลา Visual Studio โดยไม่ต้องใช้ปลั๊กอินเพิ่มเติมจำเป็นต้องใช้การแสดงผลปกติและดังนั้นจึงเป็นการหลีกเลี่ยงข้อความธรรมดา
Suzanne Dupéron

2
ฉันไม่ได้หมายความอย่างนั้นในทางที่ไม่ดี คำขอโทษของฉันฉันลืมใส่รอยยิ้ม: D สำหรับวิธีการแก้ปัญหาไม่มีฉันไม่ได้มีหนึ่งที่เกี่ยวข้องกับ VS แต่ฉันพบว่าตัวแก้ไขภายนอกที่ดีที่รองรับ regex (notepad ++ ฯลฯ ) ทำงานได้ค่อนข้างดี
อเล็กซ์

2
UltraEdit เป็นราชาแห่งการค้นหาแทนที่ - ที่นี่คุณค้นหา newlines, linebreaks หรืออะไรก็ตามเพียงแค่ทำเครื่องหมายบรรทัดเหล่านั้นและเริ่มการค้นหา - สำหรับแทนที่คุณซิมเพิลป้อน ^ n สำหรับ \ n, ^ r สำหรับ \ r และ ^ t สำหรับ \ t - หากมีเพียง VS2010 เท่านั้นที่จะทำเช่นเดียวกัน :-)
Miros

คุณสามารถเยี่ยมชมregex101.comเพื่อดูว่าสตริงการค้นหาของคุณจะตรงกับตัวอักษรหรือถูกตีความว่าเป็นอักขระควบคุม Regex
ErikE

7

คุณสามารถใช้Multiline Search and Replace ในแมโคร Visual Studioซึ่งให้ GUI ที่ดีสำหรับงาน

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


ดูเหมือนจะไม่ทำงานกับ Visual Studio 2017 โดยไม่มีขั้นตอนพิเศษบางอย่างเช่นต้องคลิกที่ "ค้นหาในไฟล์" จากนั้นปรับเปลี่ยนขอบเขตข้อความโต้ตอบนั้นค่าเริ่มต้นทางลัดคือ f # แบบโต้ตอบทันที
Mark Schultheiss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.