ค้นหาและแทนที่
คุณสามารถนำทางภายในเอกสารของคุณได้อย่างง่ายดายโดยใช้แป้นพิมพ์และเมาส์ แต่หากคุณมีหลายหน้าที่ต้องเลื่อนดู อาจต้องใช้เวลาสักครู่เพื่อค้นหาข้อความที่ต้องการในเอกสารขนาดยาว จะใช้เวลานานมากขึ้นเมื่อคุณต้องการแทนที่อักขระหรือคำบางตัวที่คุณใช้ในเอกสารของคุณ ฟังก์ชัน “ค้นหาและแทนที่” ช่วยให้คุณสามารถค้นหาลำดับอักขระในเอกสารและแทนที่ด้วยลำดับอักขระอื่นได้
Aspose.Words ช่วยให้คุณค้นหาสตริงเฉพาะหรือรูปแบบนิพจน์ทั่วไปในเอกสารของคุณและแทนที่ด้วยสตริงอื่นโดยไม่ต้องติดตั้งและใช้แอปพลิเคชันเพิ่มเติม เช่น Microsoft Word ซึ่งจะทำให้งานพิมพ์และการจัดรูปแบบต่างๆ เร็วขึ้น ซึ่งอาจช่วยคุณประหยัดเวลาในการทำงานได้
บทความนี้จะอธิบายวิธีการใช้การแทนที่สตริงและนิพจน์ทั่วไปโดยได้รับการสนับสนุนจากเมตาอักขระ
วิธีค้นหาและแทนที่
Aspose.Words มีสองวิธีในการใช้การค้นหาและแทนที่โดยใช้สิ่งต่อไปนี้:
- การแทนที่สตริงอย่างง่าย – ในการค้นหาและแทนที่สตริงที่ระบุด้วยสตริงอื่น คุณต้องระบุสตริงการค้นหา (อักขระที่เป็นตัวอักษรและตัวเลข) ที่จะถูกแทนที่ด้วยสตริงการแทนที่ที่ระบุอื่นตามเหตุการณ์ทั้งหมด ทั้งสองสายต้องไม่มีสัญลักษณ์ โปรดทราบว่าการเปรียบเทียบสตริงอาจคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ หรือคุณอาจไม่แน่ใจในการสะกดหรือมีการสะกดที่คล้ายกันหลายตัว
- นิพจน์ทั่วไป – เพื่อระบุนิพจน์ทั่วไปเพื่อค้นหาสตริงที่ตรงกันทุกประการ และแทนที่ตามนิพจน์ทั่วไปของคุณ โปรดทราบว่าคำที่ถูกกำหนดให้ประกอบด้วยอักขระตัวอักษรและตัวเลขเท่านั้น หากดำเนินการแทนที่โดยจับคู่ทั้งคำเท่านั้นและสตริงอินพุตมีสัญลักษณ์ จะไม่พบวลีใดๆ
นอกจากนี้ คุณยังสามารถใช้อักขระเมตาพิเศษที่มีการแทนที่สตริงอย่างง่ายและนิพจน์ทั่วไปเพื่อระบุตัวแบ่งภายในการดำเนินการค้นหาและแทนที่
Aspose.Words นำเสนอฟังก์ชันการค้นหาและแทนที่ด้วยโมดูล aspose.words.replacing คุณสามารถทำงานกับตัวเลือกมากมายในระหว่างกระบวนการค้นหาและแทนที่โดยใช้คลาส FindReplaceOptions
ค้นหาและแทนที่ข้อความโดยใช้การแทนที่สตริงอย่างง่าย
คุณสามารถใช้หนึ่งในวิธี replace และ replace_regex เพื่อค้นหาหรือแทนที่สตริงที่ต้องการ และส่งกลับจำนวนการแทนที่ที่ทำขึ้น ในกรณีนี้ คุณสามารถระบุสตริงที่จะแทนที่ สตริงที่จะแทนที่รายการทั้งหมด ไม่ว่าการแทนที่จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่หรือไม่ และเฉพาะคำเดี่ยวๆ เท่านั้นที่จะได้รับผลกระทบหรือไม่
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีค้นหาสตริง “CustomerName” และแทนที่ด้วยสตริง “James Bond”:
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.writeln("Hello _CustomerName_,")
print("Original document text: " + doc.range.text)
doc.range.replace("_CustomerName_", "James Bond", aw.replacing.FindReplaceOptions(aw.replacing.FindReplaceDirection.FORWARD))
print("Document text after replace: " + doc.range.text)
# Save the modified document
doc.save(docs_base.artifacts_dir + "FindAndReplace.simple_find_replace.docx")
คุณสามารถสังเกตเห็นความแตกต่างระหว่างเอกสารก่อนที่จะใช้การแทนที่สตริงแบบง่าย:

และหลังจากใช้การแทนที่สตริงแบบง่ายแล้ว:

ค้นหาและแทนที่ข้อความโดยใช้นิพจน์ทั่วไป
นิพจน์ทั่วไปคือรูปแบบที่อธิบายลำดับข้อความบางลำดับ สมมติว่าคุณต้องการแทนที่คำที่ซ้ำกันทั้งหมดด้วยคำเดียวที่เกิดขึ้น จากนั้นคุณสามารถใช้นิพจน์ทั่วไปต่อไปนี้เพื่อระบุรูปแบบคำคู่: ([a-zA-Z]+) \1
ใช้วิธี replace_regex เพื่อค้นหาและแทนที่ชุดอักขระโดยการตั้งค่าพารามิเตอร์นิพจน์ทั่วไปเป็นรูปแบบเพื่อค้นหารายการที่ตรงกัน
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทนที่สตริงที่ตรงกับรูปแบบนิพจน์ทั่วไปด้วยสตริงการแทนที่ที่ระบุ:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
builder.writeln("sad mad bad") | |
options = aw.replacing.FindReplaceOptions() | |
doc.range.replace_regex("[s|m]ad", "bad", options) | |
doc.save(docs_base.artifacts_dir + "FindAndReplace.replace_with_regex.docx") |
คุณสามารถสังเกตเห็นความแตกต่างระหว่างเอกสารก่อนที่จะใช้การแทนที่สตริงด้วยนิพจน์ทั่วไป:

และหลังจากใช้การแทนที่สตริงด้วยนิพจน์ทั่วไป:

ค้นหาและแทนที่สตริงโดยใช้ MetaCharacters
คุณสามารถใช้อักขระเมตาในสตริงการค้นหาหรือสตริงการแทนที่ได้ หากข้อความหรือวลีใดประกอบด้วยหลายย่อหน้า ส่วน หรือหน้า เมตาอักขระบางตัวประกอบด้วย &พี สำหรับตัวแบ่งย่อหน้า, &ข สำหรับตัวแบ่งส่วน, & ม สำหรับตัวแบ่งหน้า และ &ล สำหรับตัวแบ่งบรรทัด
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทนที่ข้อความด้วยตัวแบ่งย่อหน้าและหน้า:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
builder.font.name = "Arial" | |
builder.writeln("First section") | |
builder.writeln(" 1st paragraph") | |
builder.writeln(" 2nd paragraph") | |
builder.writeln("insert-section") | |
builder.writeln("Second section") | |
builder.writeln(" 1st paragraph") | |
findReplaceOptions = aw.replacing.FindReplaceOptions() | |
findReplaceOptions.apply_paragraph_format.alignment = aw.ParagraphAlignment.CENTER | |
# Double each paragraph break after word "section", add kind of underline and make it centered. | |
count = doc.range.replace("section&p", "section&p----------------------&p", findReplaceOptions) | |
# Insert section break instead of custom text tag. | |
count = doc.range.replace("insert-section", "&b", findReplaceOptions) | |
doc.save(docs_base.artifacts_dir + "FindAndReplace.replace_text_containing_meta_characters.docx") |
ค้นหาและแทนที่สตริงในส่วนหัว/ส่วนท้ายของเอกสาร
คุณสามารถค้นหาและแทนที่ข้อความในส่วนหัว/ส่วนท้ายของเอกสาร Word ได้โดยใช้คลาส HeaderFooter
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการแทนที่ข้อความของส่วนหัวในเอกสารของคุณ:
คุณสามารถสังเกตเห็นความแตกต่างระหว่างเอกสารก่อนที่จะใช้การแทนที่สตริงส่วนหัว:

และหลังจากใช้การแทนที่สตริงส่วนหัว:

ตัวอย่างโค้ดเพื่อแทนที่ข้อความของส่วนท้ายในเอกสารของคุณคล้ายกับตัวอย่างโค้ดส่วนหัวก่อนหน้ามาก สิ่งที่คุณต้องทำคือแทนที่สองบรรทัดต่อไปนี้:
header = headersFooters.get_by_header_footer_type(aw.HeaderFooterType.HEADER_PRIMARY)
header.range.replace("Aspose.Words", "Remove", options)
โดยมีดังต่อไปนี้:
header = headersFooters.get_by_header_footer_type(aw.HeaderFooterType.FOOTER_PRIMARY)
header.range.replace("Aspose.Words", "Remove", options)
คุณสามารถสังเกตเห็นความแตกต่างระหว่างเอกสารก่อนที่จะใช้การแทนที่สตริงส่วนท้าย:

และหลังจากใช้การแทนที่สตริงส่วนท้าย:

ละเว้นข้อความระหว่างการค้นหาและแทนที่
ในขณะที่ใช้การดำเนินการค้นหาและแทนที่ คุณสามารถละเว้นบางส่วนของข้อความได้ ดังนั้น บางส่วนของข้อความจึงสามารถแยกออกจากการค้นหาได้ และการค้นหาและการแทนที่สามารถใช้ได้เฉพาะกับส่วนที่เหลือเท่านั้น
Aspose.Words มีคุณสมบัติการค้นหาและแทนที่มากมายสำหรับการละเว้นข้อความ เช่น ignore_deleted, ignore_fields และ ignore_inserted
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการละเว้นข้อความภายในการแก้ไขการลบ:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document() | |
builder = aw.DocumentBuilder(doc) | |
# Insert non-revised text. | |
builder.writeln("Deleted") | |
builder.write("Text") | |
# Remove first paragraph with tracking revisions. | |
doc.start_track_revisions("author", DateTime.now) | |
doc.first_section.body.first_paragraph.remove() | |
doc.stop_track_revisions() | |
options = aw.replacing.FindReplaceOptions() | |
options.ignore_deleted = True | |
doc.range.replace_regex("e", "*", options) | |
print(doc.get_text()) | |
options.ignore_deleted = False | |
doc.range.replace(regex, "*", options) | |
print(doc.get_text()) |
ปรับแต่งการดำเนินการค้นหาและแทนที่
Aspose.Words มีคุณสมบัติต่างๆ มากมายเพื่อค้นหาและแทนที่ข้อความ เช่น การใช้รูปแบบเฉพาะกับคุณสมบัติ apply_font และ apply_paragraph_formats การใช้การทดแทนในรูปแบบการแทนที่ด้วยคุณสมบัติ use_substitutions และอื่นๆ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีเน้นคำเฉพาะในเอกสารของคุณ:
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET | |
doc = aw.Document(docs_base.my_dir + "Find and highlight.docx") | |
options = aw.replacing.FindReplaceOptions() | |
options.direction = aw.replacing.FindReplaceDirection.BACKWARD | |
options.apply_font.highlight_color = drawing.Color.yellow | |
text = "your document" | |
doc.range.replace(text, text, options) | |
doc.save(docs_base.artifacts_dir + "FindAndReplace.find_and_highlight.docx") |