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() na Document.Range w celu zamiany w całym dokumencie, lub na węższym Range (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 IReplacingCallback zamiast 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.Stop z funkcji zwrotnej, aby zakończyć operację znajdź/zamień wcześniej, gdy spełniony zostanie warunek, zamiast przetwarzać wszystkie pozostałe dopasowania.

Typowe problemy

ProblemPrzyczynaNaprawa
Zastąpienie nie stosuje nowego formatowaniaApplyFont/ApplyParagraphFormat nie ustawiono na FindReplaceOptionsUstaw odpowiednie właściwości formatowania w obiekcie options
Nieoczekiwanie znaleziono dopasowania w usunięciach śledzonych zmianIgnoreDeleted pozostawiono w wartości domyślnejUstaw IgnoreDeleted = true, aby pominąć usuniętą treść rewizji
Odniesienia do grup wyrażeń regularnych w tekście zastąpienia nie zostały podstawioneUseSubstitutions nie włączonyUstaw UseSubstitutions = true, aby włączyć podstawianie w stylu $1
Zastępowanie oparte na wywołaniu zwrotnym nie zatrzymuje się, gdy jest to oczekiwaneWywołanie zwrotne zwraca Replace/Skip zamiast StopZwróć 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 / MetodaOpis
Range.Replace()Wyszukiwanie i zamiana wyrażeniem regularnym w zakresie, z opcjonalnym FindReplaceOptions
FindReplaceOptionsKonfiguruje zachowanie dopasowania, formatowanie i zakres strukturalny dla operacji zamiany
FindReplaceDirectionWyliczenie: Forward, Backward
IReplacingCallbackInterfejs dla niestandardowej logiki zamiany dla każdego dopasowania
ReplacingArgsDane dla każdego dopasowania przekazywane do IReplacingCallback.Replacing()
ReplaceActionWyliczenie kontrolujące wynik dla każdego meczu: Replace, Skip, Stop

Zobacz także

 Polski