Sök och ersätt

Sök och ersätt

Aspose.Words FOSS för .NET tillhandahåller sökning och ersättning baserat på reguljära uttryck via Range.Replace(), konfigurerbart via FindReplaceOptions och, för avancerade scenarier, en anpassad IReplacingCallback-implementation från Aspose.Words.Replacing-namnrymden.


Grundläggande sökning och ersättning

Range.Replace(pattern, replacement) utför en reguljärauttrycksbaserad ersättningsoperation över intervallet — hela dokumentet när den anropas på Document.Range. Replace(pattern, replacement, options)-överlagringen accepterar ett FindReplaceOptions-objekt för finare kontroll: MatchCase och FindWholeWordsOnly justerar matchningsbeteendet, Direction (ett FindReplaceDirection-värde, Forward eller Backward) styr sökriktningen, och ApplyFont / ApplyParagraphFormat låter en ersättning behålla ny formatering snarare än bara ny text.


Formateringsmedvetna och strukturella alternativ

FindReplaceOptions innehåller flera flaggor som bestämmer vilka dokumentkonstruktioner en matchning får korsa eller ignorera: IgnoreDeleted och IgnoreInserted styr huruvida spårade ändringar inkluderas i matchningen, IgnoreFields och IgnoreFieldCodes styr om fältresultatets text respektive fältkoder söks igenom, IgnoreFootnotes exkluderar fotnot-/slutnotinnehåll, och IgnoreStructuredDocumentTags och IgnoreShapes exkluderar respektive innehållskontroller och formtext. UseSubstitutions möjliggör reguljära uttrycks ersättningssyntax (som $1) i ersättningssträngen. LegacyMode och UseLegacyOrder bevarar äldre matchningsbeteende för kompatibilitet med dokument som bearbetats av tidigare logik.


Anpassad ersättningslogik med IReplacingCallback

För ersättningslogik som inte kan uttryckas som en fast ersättningssträng, implementera IReplacingCallback och dess enda Replacing(args) metod, och tilldela sedan implementationen till FindReplaceOptions.ReplacingCallback (eller skicka den direkt till FindReplaceOptions(replacingCallback)-konstruktorn). Återuppringningen får ett ReplacingArgs-objekt för varje träff, som exponerar Match (det underliggande reguljära uttryckets matchning), MatchNode / MatchEndNode (dokumentnoderna som innehåller träffen), MatchOffset, och en inställningsbar Replacement-sträng. Att returnera ett ReplaceAction-värde från återuppringningen — Replace, Skip eller Stop — styr om den specifika träffen ersätts, lämnas orörd eller avbryter hela sök-och-ersätt-operationen.


Tips och bästa praxis

  • Anropa Replace() på Document.Range för dokumentomfattande ersättning, eller på ett smalare Range (t.ex. ett enskilt sektionsintervall) för att avgränsa operationen.
  • Ställ in FindWholeWordsOnly = true för att undvika att ett sökord matchas som en del av ett längre ord.
  • Använd IgnoreFieldCodes = true när du vill att ersättningen ska verka på de visade fältresultaten, inte på den underliggande fältinstruktionstexten.
  • Föredra IReplacingCallback framför efterbearbetning när ersättningstexten beror på matchningskontexten (omgivande nod, formatering eller position) snarare än att vara en fast sträng.
  • Returnera ReplaceAction.Stop från en återuppringning för att avsluta en sök-och-ersätt-operation tidigt när ett villkor uppfylls, istället för att bearbeta varje återstående träff.

Vanliga problem

ProblemOrsakLösning
Ersättningen tillämpar inte ny formateringApplyFont/ApplyParagraphFormat är inte inställd på FindReplaceOptionsStäll in relevanta formateringsegenskaper på options-objektet
Matchningar hittades oväntat inom spårade ändringsborttagningarIgnoreDeleted lämnades på standardvärdetStäll in IgnoreDeleted = true för att hoppa över raderat revisionsinnehåll
Regex-gruppreferenser i ersättningstexten ersattes inteUseSubstitutions är inte aktiveradStäll in UseSubstitutions = true för att möjliggöra $1-stil substitution
Callback-baserad ersättning stoppar inte när den förväntasCallback returnerar Replace/Skip istället för StopReturnera ReplaceAction.Stop från Replacing() när operationen ska avslutas

FAQ

Stöder Range.Replace() reguljära uttryck?

Ja — argumentet pattern är ett reguljärt uttryck som matchas mot områdets text.

Hur ersätter jag text bara i ett specifikt avsnitt, inte i hela dokumentet?

Anropa Replace() på det avsnittets Range istället för Document.Range.

Hur får jag ersättningstexten att bero på vad som matchades?

Implementera IReplacingCallback, läs matchningsdetaljerna från ReplacingArgs, sätt ReplacingArgs.Replacement till den beräknade texten och returnera ReplaceAction.Replace.

Kan sök-/ersättningsfunktionen söka bakåt i dokumentet?

Ja — sätt FindReplaceOptions.Direction till FindReplaceDirection.Backward.


API Reference Sammanfattning

Klass / MetodBeskrivning
Range.Replace()Reguljärt uttryck sök/ersätt över ett intervall, med valfritt FindReplaceOptions
FindReplaceOptionsKonfigurerar matchningsbeteende, formatering och strukturellt omfång för ersättningsoperationer
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackGränssnitt för anpassad per-match-ersättningslogik
ReplacingArgsPer-match-data som skickas till IReplacingCallback.Replacing()
ReplaceActionEnum som styr utfall per match: Replace, Skip, Stop

Se även

 Svenska