Cari dan Ganti

Cari dan Ganti

Aspose.Words FOSS untuk .NET menyediakan pencarian dan penggantian berbasis ekspresi reguler melalui Range.Replace(), dapat dikonfigurasi melalui FindReplaceOptions dan, untuk skenario lanjutan, implementasi IReplacingCallback khusus dari namespace Aspose.Words.Replacing.


Pencarian dan Penggantian Dasar

Range.Replace(pattern, replacement) menjalankan pencarian dan penggantian berbasis ekspresi reguler di seluruh rentang — seluruh dokumen, ketika dipanggil pada Document.Range. Overload Replace(pattern, replacement, options) menerima objek FindReplaceOptions untuk kontrol yang lebih halus: MatchCase dan FindWholeWordsOnly menyesuaikan perilaku pencocokan, Direction (nilai FindReplaceDirection, Forward atau Backward) mengontrol arah pencarian, dan ApplyFont / ApplyParagraphFormat memungkinkan penggantian membawa pemformatan baru bukan hanya teks baru.


Opsi yang Memahami Pemformatan dan Struktural

FindReplaceOptions mencakup beberapa flag yang menentukan konstruksi dokumen mana yang dapat dilintasi atau diabaikan oleh sebuah kecocokan: IgnoreDeleted dan IgnoreInserted mengontrol apakah konten perubahan terlacak ikut serta dalam pencocokan, IgnoreFields dan IgnoreFieldCodes mengontrol apakah teks hasil bidang dan kode bidang dicari, IgnoreFootnotes mengecualikan konten catatan kaki/akhir, dan IgnoreStructuredDocumentTags serta IgnoreShapes masing-masing mengecualikan kontrol konten dan teks bentuk. UseSubstitutions mengaktifkan sintaks substitusi ekspresi reguler (seperti $1) dalam string pengganti. LegacyMode dan UseLegacyOrder mempertahankan perilaku pencocokan lama untuk kompatibilitas dengan dokumen yang diproses oleh logika sebelumnya.


Logika Penggantian Kustom dengan IReplacingCallback

Untuk logika penggantian yang tidak dapat diekspresikan sebagai string pengganti tetap, implementasikan IReplacingCallback dan metode tunggal Replacing(args)nya, lalu tetapkan implementasinya ke FindReplaceOptions.ReplacingCallback (atau lewati langsung ke konstruktor FindReplaceOptions(replacingCallback)). Callback menerima objek ReplacingArgs untuk setiap kecocokan, yang mengungkapkan Match (kecocokan ekspresi reguler yang mendasari), MatchNode / MatchEndNode (node dokumen yang berisi kecocokan), MatchOffset, dan string Replacement yang dapat diatur. Mengembalikan nilai ReplaceAction dari callback — Replace, Skip, atau Stop — mengontrol apakah kecocokan tersebut diganti, dibiarkan, atau menghentikan seluruh operasi temukan/ganti.


Tips dan Praktik Terbaik

  • Panggil Replace() pada Document.Range untuk penggantian pada seluruh dokumen, atau pada Range yang lebih sempit (seperti rentang satu bagian) untuk membatasi operasi.
  • Atur FindWholeWordsOnly = true untuk menghindari pencocokan istilah pencarian sebagai substring dari kata yang lebih panjang.
  • Gunakan IgnoreFieldCodes = true ketika Anda ingin penggantian beroperasi pada hasil bidang yang ditampilkan, bukan pada teks instruksi bidang yang mendasarinya.
  • Lebih pilih IReplacingCallback daripada pemrosesan lanjutan ketika teks pengganti bergantung pada konteks kecocokan (node sekitar, format, atau posisi) bukan berupa string tetap.
  • Kembalikan ReplaceAction.Stop dari callback untuk mengakhiri operasi temukan/ganti lebih awal setelah kondisi terpenuhi, alih-alih memproses setiap kecocokan yang tersisa.

Masalah Umum

MasalahPenyebabPerbaikan
Pengganti tidak menerapkan pemformatan baruApplyFont/ApplyParagraphFormat tidak diatur pada FindReplaceOptionsSet properti pemformatan yang relevan pada objek options
Kecocokan ditemukan di dalam penghapusan perubahan yang dilacak secara tidak terdugaIgnoreDeleted dibiarkan pada nilai defaultnyaSet IgnoreDeleted = true untuk melewati konten revisi yang dihapus
Referensi grup regex dalam teks pengganti tidak digantikanUseSubstitutions tidak diaktifkanSetel UseSubstitutions = true untuk mengaktifkan substitusi gaya $1
Penggantian berbasis callback tidak berhenti sesuai yang diharapkanCallback mengembalikan Replace/Skip alih-alih StopKembalikan ReplaceAction.Stop dari Replacing() ketika operasi harus berakhir

FAQ

Apakah Range.Replace() mendukung ekspresi reguler?

Ya — argumen pattern adalah ekspresi reguler, yang dicocokkan dengan teks rentang.

Bagaimana cara saya mengganti teks hanya dalam bagian tertentu, bukan seluruh dokumen?

Panggil Replace() pada Range bagian itu alih-alih Document.Range.

Bagaimana cara membuat teks pengganti bergantung pada apa yang dicocokkan?

Implementasikan IReplacingCallback, baca detail kecocokan dari ReplacingArgs, setel ReplacingArgs.Replacement ke teks yang dihitung, dan kembalikan ReplaceAction.Replace.

Apakah pencarian temukan/ganti dapat mencari mundur dalam dokumen?

Ya — atur FindReplaceOptions.Direction menjadi FindReplaceDirection.Backward.


API Reference Ringkasan

Kelas / MetodeDeskripsi
Range.Replace()Pencarian/penggantian dengan ekspresi reguler di seluruh rentang, dengan FindReplaceOptions opsional
FindReplaceOptionsMengonfigurasi perilaku pencocokan, pemformatan, dan ruang lingkup struktural untuk operasi penggantian
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackAntarmuka untuk logika penggantian per-match kustom
ReplacingArgsData per-match yang dikirimkan ke IReplacingCallback.Replacing()
ReplaceActionEnum yang mengontrol hasil per-match: Replace, Skip, Stop

Lihat Juga

 Bahasa Indonesia