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 op Document.Range voor vervanging over het hele document, of op een smaller Range (zoals het bereik van een enkele sectie) om de bewerking te beperken.
  • Stel FindWholeWordsOnly = true in om te voorkomen dat een zoekterm wordt gematcht als een substring van een langer woord.
  • Gebruik IgnoreFieldCodes = true wanneer je wilt dat vervanging werkt op de weergegeven veldresultaten, en niet op de onderliggende veldinstructietekst.
  • Geef de voorkeur aan IReplacingCallback boven 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.Stop vanuit 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

ProbleemOorzaakOplossing
Vervanging past geen nieuwe opmaak toeApplyFont/ApplyParagraphFormat niet ingesteld op FindReplaceOptionsStel de relevante opmaak-eigenschappen in op het options-object.
Onverwacht overeenkomsten gevonden binnen tracked-change verwijderingenIgnoreDeleted gelaten op de standaardStel IgnoreDeleted = true in om verwijderde revisie-inhoud over te slaan
Regex-groepreferenties in vervangende tekst niet vervangenUseSubstitutions niet ingeschakeldStel UseSubstitutions = true in om $1-stijl substitutie in te schakelen
Callback-gebaseerde vervanging stopt niet zoals verwachtCallback retourneert Replace/Skip in plaats van StopRetourneer 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 / MethodeBeschrijving
Range.Replace()Reguliere-expressie zoeken/vervangen over een bereik, met optionele FindReplaceOptions
FindReplaceOptionsConfigureert het gedrag van overeenkomsten, de opmaak en de structurele scope voor vervangingsbewerkingen
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackInterface voor aangepaste per-match vervangingslogica
ReplacingArgsPer-match gegevens doorgegeven aan IReplacingCallback.Replacing()
ReplaceActionEnum die de uitkomst per wedstrijd regelt: Replace, Skip, Stop

Zie ook

 Nederlands