Zoeken en vervangen
Zoeken en vervangen
Aspose.Words FOSS voor .NET biedt op reguliere-expressies gebaseerde zoeken-en-vervangen via Range.Replace(), configureerbaar via FindReplaceOptions en, voor geavanceerde scenario’s, een aangepaste IReplacingCallback implementatie uit de Aspose.Words.Replacing namespace.
Basis zoeken en vervangen
Range.Replace(pattern, replacement) voert een op reguliere-expressies gebaseerde zoeken-en-vervangen uit over het bereik — het hele document, wanneer aangeroepen op Document.Range. De Replace(pattern, replacement, options) overload accepteert een FindReplaceOptions object voor fijnere controle: MatchCase en FindWholeWordsOnly passen het overeenkomstgedrag aan, Direction (een FindReplaceDirection waarde, Forward of Backward) bepaalt de zoekrichting, en ApplyFont / ApplyParagraphFormat laten een vervanging nieuwe opmaak dragen in plaats van alleen nieuwe tekst.
Opmaakbewuste en structurele opties
FindReplaceOptions bevat verschillende vlaggen die bepalen welke documentconstructies een overeenkomst mag kruisen of negeren: IgnoreDeleted en IgnoreInserted bepalen of inhoud met getraceerde wijzigingen meedoet aan het matchen, IgnoreFields en IgnoreFieldCodes bepalen of veldresultaattekst en veldcodes worden doorzocht, IgnoreFootnotes sluit voetnoot-/eindnootinhoud uit, en IgnoreStructuredDocumentTags en IgnoreShapes sluiten respectievelijk inhoudsbesturingselementen en vormtekst uit. UseSubstitutions maakt reguliere-expressie vervangingssyntaxis (zoals $1) mogelijk in de vervangingsreeks. LegacyMode en UseLegacyOrder behouden ouder gedrag bij het matchen voor compatibiliteit met documenten die door eerdere logica zijn verwerkt.
Aangepaste vervanglogica met IReplacingCallback
Voor vervangingslogica die niet kan worden uitgedrukt als een vaste vervangingsreeks, implementeer IReplacingCallback en zijn enige Replacing(args) methode, wijs vervolgens de implementatie toe aan FindReplaceOptions.ReplacingCallback (of geef deze direct door aan de FindReplaceOptions(replacingCallback) constructor). De callback ontvangt een ReplacingArgs object voor elke overeenkomst, waarbij Match (de onderliggende reguliere-expressie-overeenkomst), MatchNode / MatchEndNode (de documentknooppunten die de overeenkomst bevatten), MatchOffset, en een instelbare Replacement string worden blootgesteld. Het retourneren van een ReplaceAction waarde vanuit de callback — Replace, Skip of Stop — bepaalt of die specifieke overeenkomst wordt vervangen, onveranderd blijft, of de gehele zoek/vervang-operatie stopt.
Tips en best practices
- Roep
Replace()aan opDocument.Rangevoor vervanging over het hele document, of op een smallerRange(zoals het bereik van een enkele sectie) om de bewerking te beperken. - Stel
FindWholeWordsOnly = truein om te voorkomen dat een zoekterm wordt gematcht als een substring van een langer woord. - Gebruik
IgnoreFieldCodes = truewanneer je wilt dat vervanging werkt op de weergegeven veldresultaten, en niet op de onderliggende veldinstructietekst. - Geef de voorkeur aan
IReplacingCallbackboven nabewerking wanneer de vervangingstekst afhankelijk is van de context van de overeenkomst (omliggende knoop, opmaak of positie) in plaats van een vaste tekenreeks te zijn. - Retourneer
ReplaceAction.Stopvanuit een callback om een zoek/vervang-operatie vroegtijdig te beëindigen zodra aan een voorwaarde is voldaan, in plaats van elk resterend resultaat te verwerken.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| Vervanging past geen nieuwe opmaak toe | ApplyFont/ApplyParagraphFormat niet ingesteld op FindReplaceOptions | Stel de relevante opmaak-eigenschappen in op het options-object. |
| Onverwacht overeenkomsten gevonden binnen tracked-change verwijderingen | IgnoreDeleted gelaten op de standaard | Stel IgnoreDeleted = true in om verwijderde revisie-inhoud over te slaan |
| Regex-groepreferenties in vervangende tekst niet vervangen | UseSubstitutions niet ingeschakeld | Stel UseSubstitutions = true in om $1-stijl substitutie in te schakelen |
| Callback-gebaseerde vervanging stopt niet zoals verwacht | Callback retourneert Replace/Skip in plaats van Stop | Retourneer ReplaceAction.Stop vanuit Replacing() wanneer de bewerking moet eindigen |
FAQ
Ondersteunt Range.Replace() reguliere expressies?
Ja — het pattern argument is een reguliere expressie, die wordt vergeleken met de tekst van het bereik.
Hoe vervang ik tekst alleen binnen een specifieke sectie, en niet het hele document?
Roep Replace() aan op de Range van die sectie in plaats van Document.Range.
Hoe kan ik de vervangingstekst laten afhangen van wat er overeenkwam?
Implementeer IReplacingCallback, lees de matchdetails van ReplacingArgs, stel ReplacingArgs.Replacement in op de berekende tekst, en retourneer ReplaceAction.Replace.
Kan find/replace achterwaarts door het document zoeken?
Ja — stel FindReplaceOptions.Direction in op FindReplaceDirection.Backward.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
Range.Replace() | Reguliere-expressie zoeken/vervangen over een bereik, met optionele FindReplaceOptions |
FindReplaceOptions | Configureert het gedrag van overeenkomsten, de opmaak en de structurele scope voor vervangingsbewerkingen |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Interface voor aangepaste per-match vervangingslogica |
ReplacingArgs | Per-match gegevens doorgegeven aan IReplacingCallback.Replacing() |
ReplaceAction | Enum die de uitkomst per wedstrijd regelt: Replace, Skip, Stop |