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()aufDocument.Rangefür dokumentweite Ersetzung auf, oder auf ein engeresRange(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
IReplacingCallbackgegenü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.Stopaus 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
| Problem | Ursache | Behebung |
|---|---|---|
| Ersetzung wendet neue Formatierung nicht an | ApplyFont/ApplyParagraphFormat nicht gesetzt auf FindReplaceOptions | Setzen Sie die relevanten Formatierungseigenschaften im Optionsobjekt. |
| Übereinstimmungen unerwartet innerhalb von Nachverfolgungs-Löschungen gefunden | IgnoreDeleted bleibt auf dem Standardwert | SetzeIgnoreDeleted = true,umgelöschteRevisionsinhaltezuüberspringen. |
| Regex-Gruppenreferenzen im Ersetzungstext nicht ersetzt | UseSubstitutions nicht aktiviert | Setze UseSubstitutions = true, um Substitution im $1-Stil zu aktivieren |
| Callback-basierte Ersetzung stoppt nicht wie erwartet | Callback gibt Replace/Skip anstelle von Stop zurück | Gib 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 / Methode | Beschreibung |
|---|---|
Range.Replace() | Regulärer Ausdruck Suchen/Ersetzen über einen Bereich, mit optionalem FindReplaceOptions |
FindReplaceOptions | Konfiguriert das Matching-Verhalten, die Formatierung und den strukturellen Geltungsbereich für Ersetzungsoperationen |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Schnittstelle für benutzerdefinierte per-Match-Ersetzungslogik |
ReplacingArgs | Per-Match-Daten, die an IReplacingCallback.Replacing() übergeben werden |
ReplaceAction | Enum, das das Ergebnis pro Match steuert: Replace, Skip, Stop |