Suchen und Ersetzen

Suchen und Ersetzen

Aspose.Words FOSS für .NET bietet reguläre-Ausdruck-basierte Suche und Ersetzung über Range.Replace(), konfigurierbar über FindReplaceOptions und, für erweiterte Szenarien, eine benutzerdefinierte IReplacingCallback-Implementierung aus dem Aspose.Words.Replacing-Namespace.


Grundlegende Suche und Ersetzung

Range.Replace(pattern, replacement) führt eine reguläre-Ausdruck-Suche-und-Ersetzung über den Bereich aus — das gesamte Dokument, wenn es auf Document.Range angewendet wird. Die Replace(pattern, replacement, options)-Überladung akzeptiert ein FindReplaceOptions-Objekt für feinere Kontrolle: MatchCase und FindWholeWordsOnly passen das Match-Verhalten an, Direction (ein FindReplaceDirection-Wert, Forward oder Backward) steuert die Suchrichtung, und ApplyFont / ApplyParagraphFormat ermöglichen es, dass eine Ersetzung neue Formatierung mitbringt statt nur neuen Text.


Formatierungs-bewusste und strukturelle Optionen

FindReplaceOptions enthält mehrere Flags, die bestimmen, welche Dokumentkonstrukte ein Match überqueren oder ignorieren darf: IgnoreDeleted und IgnoreInserted steuern, ob Inhalte von Nachverfolgungsänderungen am Abgleich teilnehmen, IgnoreFields und IgnoreFieldCodes bestimmen, ob Feldresultat-Text und Feldcodes durchsucht werden, IgnoreFootnotes schließt Fuß-/Endnoten-Inhalte aus, und IgnoreStructuredDocumentTags bzw. IgnoreShapes schließen Inhaltssteuerelemente bzw. Formtext aus. UseSubstitutions aktiviert die reguläre-Ausdruck-Ersetzungssyntax (wie $1) im Ersetzungsstring. LegacyMode und UseLegacyOrder erhalten das ältere Matching-Verhalten zur Kompatibilität mit Dokumenten, die durch frühere Logik verarbeitet wurden.


Benutzerdefinierte Ersetzungslogik mit IReplacingCallback

Für Ersetzungslogik, die nicht als fester Ersetzungsstring ausgedrückt werden kann, implementieren Sie IReplacingCallback und seine einzige Replacing(args)-Methode, und weisen Sie die Implementierung FindReplaceOptions.ReplacingCallback zu (oder übergeben Sie sie direkt an den FindReplaceOptions(replacingCallback)-Konstruktor). Der Callback erhält für jedes Match ein ReplacingArgs-Objekt, das Match (den zugrunde liegenden regulären Ausdrucks-Match), MatchNode / MatchEndNode (die Dokumentknoten, die das Match enthalten), MatchOffset und einen setzbaren Replacement-String offenlegt. Die Rückgabe eines ReplaceAction-Werts aus dem Callback — Replace, Skip oder Stop — steuert, ob dieses bestimmte Match ersetzt, unverändert lässt oder den gesamten Suchen/Ersetzen-Vorgang stoppt.


Tipps und bewährte Vorgehensweisen

  • Rufen Sie Replace() auf Document.Range für dokumentweite Ersetzung auf, oder auf ein engeres Range (wie den Bereich eines einzelnen Abschnitts), um den Vorgang einzugrenzen.
  • Setzen Sie FindWholeWordsOnly = true, um zu verhindern, dass ein Suchbegriff als Teilstring eines längeren Wortes übereinstimmt.
  • Verwenden Sie IgnoreFieldCodes = true, wenn die Ersetzung auf den angezeigten Feldresultaten und nicht auf dem zugrunde liegenden Feldanweisungstext erfolgen soll.
  • Bevorzugen Sie IReplacingCallback gegenüber der Nachbearbeitung, wenn der Ersetzungstext vom Kontext des Matches (umgebender Knoten, Formatierung oder Position) abhängt, anstatt ein fester String zu sein.
  • Geben Sie ReplaceAction.Stop aus einem Callback zurück, um eine Suchen/Ersetzen-Operation frühzeitig zu beenden, sobald eine Bedingung erfüllt ist, anstatt jedes verbleibende Match zu verarbeiten.

Häufige Probleme

ProblemUrsacheBehebung
Ersetzung wendet neue Formatierung nicht anApplyFont/ApplyParagraphFormat nicht gesetzt auf FindReplaceOptionsSetzen Sie die relevanten Formatierungseigenschaften im Optionsobjekt.
Übereinstimmungen unerwartet innerhalb von Nachverfolgungs-Löschungen gefundenIgnoreDeleted bleibt auf dem StandardwertSetzeIgnoreDeleted = true,umgelöschteRevisionsinhaltezuüberspringen.
Regex-Gruppenreferenzen im Ersetzungstext nicht ersetztUseSubstitutions nicht aktiviertSetze UseSubstitutions = true, um Substitution im $1-Stil zu aktivieren
Callback-basierte Ersetzung stoppt nicht wie erwartetCallback gibt Replace/Skip anstelle von Stop zurückGib ReplaceAction.Stop aus Replacing() zurück, wenn die Operation beendet werden soll

FAQ

Unterstützt Range.Replace() reguläre Ausdrücke?

Ja — das pattern-Argument ist ein regulärer Ausdruck, der mit dem Text des Bereichs abgeglichen wird.

Wie ersetze ich Text nur innerhalb eines bestimmten Abschnitts und nicht im gesamten Dokument?

Rufe Replace() auf dem Range dieses Abschnitts anstelle von Document.Range auf.

Wie kann ich den Ersetzungstext von dem, was gefunden wurde, abhängig machen?

Implementiere IReplacingCallback, lese die Übereinstimmungsdetails aus ReplacingArgs, setze ReplacingArgs.Replacement auf den berechneten Text und gib ReplaceAction.Replace zurück.

Kann die Suchen/Ersetzen-Funktion rückwärts im Dokument suchen?

Ja — setze FindReplaceOptions.Direction auf FindReplaceDirection.Backward.


API Reference Zusammenfassung

Klasse / MethodeBeschreibung
Range.Replace()Regulärer Ausdruck Suchen/Ersetzen über einen Bereich, mit optionalem FindReplaceOptions
FindReplaceOptionsKonfiguriert das Matching-Verhalten, die Formatierung und den strukturellen Geltungsbereich für Ersetzungsoperationen
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackSchnittstelle für benutzerdefinierte per-Match-Ersetzungslogik
ReplacingArgsPer-Match-Daten, die an IReplacingCallback.Replacing() übergeben werden
ReplaceActionEnum, das das Ergebnis pro Match steuert: Replace, Skip, Stop

Siehe auch

 Deutsch