ค้นหาและแทนที่

ค้นหาและแทนที่

Aspose.Words FOSS สำหรับ .NET ให้การค้นหาและแทนที่แบบ regular-expression-based ผ่าน Range.Replace() สามารถกำหนดค่าได้ผ่าน FindReplaceOptions และสำหรับสถานการณ์ขั้นสูง สามารถใช้การนำเข้า IReplacingCallback ที่กำหนดเองจากเนมสเปซ Aspose.Words.Replacing.


ค้นหาและแทนที่พื้นฐาน

Range.Replace(pattern, replacement) ทำการค้นหาและแทนที่ด้วย regular-expression ครอบคลุมช่วง — ทั้งเอกสารเมื่อเรียกบน Document.Range. การ overload ของ Replace(pattern, replacement, options) รับอ็อบเจกต์ FindReplaceOptions เพื่อการควบคุมที่ละเอียดขึ้น: MatchCase และ FindWholeWordsOnly ปรับพฤติกรรมการจับคู่, Direction (ค่าชนิด FindReplaceDirection, Forward หรือ Backward) ควบคุมทิศทางการค้นหา, และ ApplyFont / ApplyParagraphFormat ทำให้การแทนที่สามารถพา formatting ใหม่ไปด้วย ไม่ใช่แค่ข้อความใหม่.


ตัวเลือกที่รับรู้รูปแบบและโครงสร้าง

FindReplaceOptions มีแฟล็กหลายตัวที่กำหนดว่าโครงสร้างใดของเอกสารที่การจับคู่สามารถข้ามหรือละเว้นได้: IgnoreDeleted และ IgnoreInserted ควบคุมว่าข้อความที่มีการติดตามการเปลี่ยนแปลงจะมีส่วนร่วมในการจับคู่หรือไม่, IgnoreFields และ IgnoreFieldCodes ควบคุมว่าข้อความผลลัพธ์ของฟิลด์และโค้ดฟิลด์จะถูกค้นหรือไม่, IgnoreFootnotes ยกเว้นเนื้อหาของเชิงอรรถ/อรรถท้าย, และ IgnoreStructuredDocumentTags กับ IgnoreShapes ยกเว้นการควบคุมเนื้อหาและข้อความรูปทรงตามลำดับ. UseSubstitutions เปิดใช้งานไวยากรณ์การแทนที่ regular-expression (เช่น $1) ในสตริงการแทนที่. LegacyMode และ UseLegacyOrder รักษาพฤติกรรมการจับคู่แบบเก่าสำหรับความเข้ากันได้กับเอกสารที่ประมวลผลโดยตรรกะเวอร์ชันก่อนหน้า.


ตรรกะการแทนที่แบบกำหนดเองด้วย IReplacingCallback

สำหรับตรรกะการแทนที่ที่ไม่สามารถแสดงเป็นสตริงการแทนที่คงที่ได้ ให้ทำการ implement IReplacingCallback และวิธีเดียวของมัน Replacing(args) จากนั้นกำหนดการทำงานให้กับ FindReplaceOptions.ReplacingCallback (หรือส่งตรงไปยังคอนสตรัคเตอร์ FindReplaceOptions(replacingCallback)) คอลแบ็กจะรับอ็อบเจกต์ ReplacingArgs สำหรับแต่ละการจับคู่ ซึ่งเปิดเผย Match (การจับคู่ด้วย regular-expression ด้านล่าง), MatchNode / MatchEndNode (โนดของเอกสารที่มีการจับคู่), MatchOffset, และสตริง Replacement ที่สามารถตั้งค่าได้ การคืนค่า ReplaceAction จากคอลแบ็ก — Replace, Skip, หรือ Stop — จะควบคุมว่าการจับคู่นั้นจะถูกแทนที่, ทิ้งไว้เช่นเดิม, หรือหยุดการทำงานของการค้นหา/แทนที่ทั้งหมด.


เคล็ดลับและแนวปฏิบัติที่ดีที่สุด

  • เรียก Replace() บน Document.Range เพื่อทำการแทนที่ทั่วทั้งเอกสาร, หรือบน Range ที่แคบลง (เช่น ช่วงของส่วนเดียว) เพื่อกำหนดขอบเขตของการดำเนินการ.
  • ตั้งค่า FindWholeWordsOnly = true เพื่อหลีกเลี่ยงการจับคำนำค้นหาเป็นส่วนย่อยของคำที่ยาวกว่า.
  • ใช้ IgnoreFieldCodes = true เมื่อคุณต้องการให้การแทนที่ทำงานบนผลลัพธ์ของฟิลด์ที่แสดง, ไม่ใช่บนข้อความคำสั่งฟิลด์พื้นฐาน.
  • ควรเลือกใช้ IReplacingCallback แทนการประมวลผลหลังจากนั้นเมื่อข้อความการแทนที่ขึ้นอยู่กับบริบทของการจับคู่ (โนดรอบข้าง, การจัดรูปแบบ, หรือตำแหน่ง) แทนที่จะเป็นสตริงคงที่.
  • คืนค่า ReplaceAction.Stop จากคอลแบ็กเพื่อจบการทำงานของการค้นหา/แทนที่เร็วขึ้นเมื่อเงื่อนไขเป็นจริง, แทนที่จะประมวลผลการจับคู่อื่นที่เหลือทั้งหมด.

ปัญหาทั่วไป

ปัญหาสาเหตุวิธีแก้ไข
การแทนที่ไม่ใช้การจัดรูปแบบใหม่ApplyFont/ApplyParagraphFormat ไม่ได้ตั้งค่าบน FindReplaceOptionsตั้งค่าคุณสมบัติการจัดรูปแบบที่เกี่ยวข้องบนอ็อบเจ็กต์ options
พบการจับคู่ภายในการลบที่ติดตามการเปลี่ยนแปลงโดยไม่คาดคิดIgnoreDeleted อยู่ที่ค่าเริ่มต้นของมันตั้งค่า IgnoreDeleted = true เพื่อข้ามเนื้อหาการแก้ไขที่ถูกลบ
การอ้างอิงกลุ่ม Regex ในข้อความแทนที่ไม่ได้ถูกแทนที่UseSubstitutions ไม่ได้เปิดใช้งานตั้งค่า UseSubstitutions = true เพื่อเปิดใช้งานการแทนที่สไตล์ $1
การแทนที่แบบ callback ไม่หยุดตามที่คาดหวังCallback คืนค่า Replace/Skip แทน Stopคืนค่า ReplaceAction.Stop จาก Replacing() เมื่อการดำเนินการควรสิ้นสุด

FAQ

Range.Replace() รองรับ regular expressions หรือไม่?

ใช่ — อาร์กิวเมนต์ pattern เป็น regular expression ที่จับคู่กับข้อความของช่วง.

ฉันจะทำการแทนที่ข้อความเฉพาะในส่วนที่กำหนดเท่านั้น ไม่ใช่ทั้งเอกสารได้อย่างไร?

เรียก Replace() บน Range ของส่วนนั้นแทน Document.Range.

ฉันจะทำให้ข้อความแทนที่ขึ้นอยู่กับสิ่งที่ถูกจับคู่ได้อย่างไร?

ดำเนินการ IReplacingCallback, อ่านรายละเอียดการจับคู่จาก ReplacingArgs, ตั้งค่า ReplacingArgs.Replacement ให้เป็นข้อความที่คำนวณแล้ว, และคืนค่า ReplaceAction.Replace.

สามารถค้นหา/แทนที่ย้อนหลังผ่านเอกสารได้หรือไม่?

ใช่ — ตั้งค่า FindReplaceOptions.Direction เป็น FindReplaceDirection.Backward.


API Reference สรุป

คลาส / เมธอดคำอธิบาย
Range.Replace()การค้นหา/แทนที่ด้วย regular-expression ครอบช่วง, พร้อม FindReplaceOptions ตัวเลือก
FindReplaceOptionsกำหนดค่าพฤติกรรมการจับคู่, การจัดรูปแบบ, และขอบเขตโครงสร้างสำหรับการดำเนินการแทนที่
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackอินเทอร์เฟซสำหรับตรรกะการแทนที่แบบกำหนดเองต่อการจับคู่แต่ละครั้ง
ReplacingArgsข้อมูลต่อการจับคู่ที่ส่งต่อให้ IReplacingCallback.Replacing()
ReplaceActionEnum ที่ควบคุมผลลัพธ์ต่อแมตช์: Replace, Skip, Stop

ดูเพิ่มเติม

 ภาษาไทย