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()padaDocument.Rangeuntuk penggantian pada seluruh dokumen, atau padaRangeyang lebih sempit (seperti rentang satu bagian) untuk membatasi operasi. - Atur
FindWholeWordsOnly = trueuntuk menghindari pencocokan istilah pencarian sebagai substring dari kata yang lebih panjang. - Gunakan
IgnoreFieldCodes = trueketika Anda ingin penggantian beroperasi pada hasil bidang yang ditampilkan, bukan pada teks instruksi bidang yang mendasarinya. - Lebih pilih
IReplacingCallbackdaripada pemrosesan lanjutan ketika teks pengganti bergantung pada konteks kecocokan (node sekitar, format, atau posisi) bukan berupa string tetap. - Kembalikan
ReplaceAction.Stopdari callback untuk mengakhiri operasi temukan/ganti lebih awal setelah kondisi terpenuhi, alih-alih memproses setiap kecocokan yang tersisa.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
| Pengganti tidak menerapkan pemformatan baru | ApplyFont/ApplyParagraphFormat tidak diatur pada FindReplaceOptions | Set properti pemformatan yang relevan pada objek options |
| Kecocokan ditemukan di dalam penghapusan perubahan yang dilacak secara tidak terduga | IgnoreDeleted dibiarkan pada nilai defaultnya | Set IgnoreDeleted = true untuk melewati konten revisi yang dihapus |
| Referensi grup regex dalam teks pengganti tidak digantikan | UseSubstitutions tidak diaktifkan | Setel UseSubstitutions = true untuk mengaktifkan substitusi gaya $1 |
| Penggantian berbasis callback tidak berhenti sesuai yang diharapkan | Callback mengembalikan Replace/Skip alih-alih Stop | Kembalikan 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 / Metode | Deskripsi |
|---|---|
Range.Replace() | Pencarian/penggantian dengan ekspresi reguler di seluruh rentang, dengan FindReplaceOptions opsional |
FindReplaceOptions | Mengonfigurasi perilaku pencocokan, pemformatan, dan ruang lingkup struktural untuk operasi penggantian |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Antarmuka untuk logika penggantian per-match kustom |
ReplacingArgs | Data per-match yang dikirimkan ke IReplacingCallback.Replacing() |
ReplaceAction | Enum yang mengontrol hasil per-match: Replace, Skip, Stop |