Znajdź i zamień
Znajdź i zamień
Aspose.Words FOSS dla .NET zapewnia wyszukiwanie i zamianę oparte na wyrażeniach regularnych poprzez Range.Replace(), konfigurowalne za pomocą FindReplaceOptions oraz, w zaawansowanych scenariuszach, niestandardową implementację IReplacingCallback z przestrzeni nazw Aspose.Words.Replacing.
Podstawowe wyszukiwanie i zamiana
Range.Replace(pattern, replacement) wykonuje wyszukiwanie i zamianę oparte na wyrażeniach regularnych w całym zakresie — w całym dokumencie, gdy wywołany na Document.Range. Przeciążenie Replace(pattern, replacement, options) przyjmuje obiekt FindReplaceOptions dla dokładniejszej kontroli: MatchCase i FindWholeWordsOnly dostosowują zachowanie dopasowania, Direction (wartość FindReplaceDirection, Forward lub Backward) kontroluje kierunek wyszukiwania, a ApplyFont / ApplyParagraphFormat pozwalają, aby zamiana przenosiła nowe formatowanie zamiast tylko nowego tekstu.
Opcje uwzględniające formatowanie i strukturę
FindReplaceOptions zawiera kilka flag określających, które konstrukcje dokumentu dopasowanie może przekraczać lub ignorować: IgnoreDeleted i IgnoreInserted kontrolują, czy treść zmian śledzonych uczestniczy w dopasowaniu, IgnoreFields i IgnoreFieldCodes kontrolują, czy przeszukiwany jest tekst wyników pól oraz kody pól, IgnoreFootnotes wyklucza treść przypisów/stopnot, a IgnoreStructuredDocumentTags i IgnoreShapes odpowiednio wykluczają kontrolki treści i tekst kształtów. UseSubstitutions włącza składnię podstawiania wyrażeń regularnych (taką jak $1) w łańcuchu zamiany. LegacyMode i UseLegacyOrder zachowują starsze zachowanie dopasowywania w celu kompatybilności z dokumentami przetwarzanymi przez wcześniejszą logikę.
Niestandardowa logika zamiany z IReplacingCallback
Dla logiki zamiany, której nie da się wyrazić jako stały ciąg zamiany, zaimplementuj IReplacingCallback i jego jedyną metodę Replacing(args), a następnie przypisz implementację do FindReplaceOptions.ReplacingCallback (lub przekaż ją bezpośrednio do konstruktora FindReplaceOptions(replacingCallback)). Funkcja zwrotna otrzymuje obiekt ReplacingArgs dla każdego dopasowania, udostępniając Match (podstawowe dopasowanie wyrażenia regularnego), MatchNode / MatchEndNode (węzły dokumentu zawierające dopasowanie), MatchOffset, oraz ustawialny ciąg Replacement. Zwrócenie wartości ReplaceAction z funkcji zwrotnej — Replace, Skip lub Stop — steruje, czy dane dopasowanie zostanie zamienione, pozostawione bez zmian lub przerwie całe działanie znajdź/zamień.
Wskazówki i najlepsze praktyki
- Wywołaj
Replace()naDocument.Rangew celu zamiany w całym dokumencie, lub na węższymRange(np. zakresie pojedynczej sekcji), aby ograniczyć zakres operacji. - Ustaw
FindWholeWordsOnly = true, aby uniknąć dopasowania terminu wyszukiwania jako podciągu dłuższego słowa. - Użyj
IgnoreFieldCodes = true, gdy chcesz, aby zamiana działała na wyświetlonych wynikach pola, a nie na podstawowym tekście instrukcji pola. - Preferuj
IReplacingCallbackzamiast przetwarzania końcowego, gdy tekst zamiany zależy od kontekstu dopasowania (otaczającego węzła, formatowania lub pozycji), a nie jest stałym ciągiem. - Zwróć
ReplaceAction.Stopz funkcji zwrotnej, aby zakończyć operację znajdź/zamień wcześniej, gdy spełniony zostanie warunek, zamiast przetwarzać wszystkie pozostałe dopasowania.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
| Zastąpienie nie stosuje nowego formatowania | ApplyFont/ApplyParagraphFormat nie ustawiono na FindReplaceOptions | Ustaw odpowiednie właściwości formatowania w obiekcie options |
| Nieoczekiwanie znaleziono dopasowania w usunięciach śledzonych zmian | IgnoreDeleted pozostawiono w wartości domyślnej | Ustaw IgnoreDeleted = true, aby pominąć usuniętą treść rewizji |
| Odniesienia do grup wyrażeń regularnych w tekście zastąpienia nie zostały podstawione | UseSubstitutions nie włączony | Ustaw UseSubstitutions = true, aby włączyć podstawianie w stylu $1 |
| Zastępowanie oparte na wywołaniu zwrotnym nie zatrzymuje się, gdy jest to oczekiwane | Wywołanie zwrotne zwraca Replace/Skip zamiast Stop | Zwróć ReplaceAction.Stop z Replacing(), gdy operacja powinna się zakończyć |
FAQ
Czy Range.Replace() obsługuje wyrażenia regularne?
Tak — argument pattern jest wyrażeniem regularnym, dopasowywanym do tekstu zakresu.
Jak zastąpić tekst tylko w określonej sekcji, a nie w całym dokumencie?
Wywołaj Replace() na Range tej sekcji zamiast Document.Range.
Jak sprawić, by tekst zastępczy zależał od tego, co zostało dopasowane?
Zaimplementuj IReplacingCallback, odczytaj szczegóły dopasowania z ReplacingArgs, ustaw ReplacingArgs.Replacement na obliczony tekst i zwróć ReplaceAction.Replace.
Czy funkcja znajdź/zastąp może przeszukiwać dokument od tyłu?
Tak — ustaw FindReplaceOptions.Direction na FindReplaceDirection.Backward.
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
Range.Replace() | Wyszukiwanie i zamiana wyrażeniem regularnym w zakresie, z opcjonalnym FindReplaceOptions |
FindReplaceOptions | Konfiguruje zachowanie dopasowania, formatowanie i zakres strukturalny dla operacji zamiany |
FindReplaceDirection | Wyliczenie: Forward, Backward |
IReplacingCallback | Interfejs dla niestandardowej logiki zamiany dla każdego dopasowania |
ReplacingArgs | Dane dla każdego dopasowania przekazywane do IReplacingCallback.Replacing() |
ReplaceAction | Wyliczenie kontrolujące wynik dla każdego meczu: Replace, Skip, Stop |