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.Rangeför dokumentomfattande ersättning, eller på ett smalareRange(t.ex. ett enskilt sektionsintervall) för att avgränsa operationen. - Ställ in
FindWholeWordsOnly = trueför att undvika att ett sökord matchas som en del av ett längre ord. - Använd
IgnoreFieldCodes = truenär du vill att ersättningen ska verka på de visade fältresultaten, inte på den underliggande fältinstruktionstexten. - Föredra
IReplacingCallbackframför efterbearbetning när ersättningstexten beror på matchningskontexten (omgivande nod, formatering eller position) snarare än att vara en fast sträng. - Returnera
ReplaceAction.Stopfrå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
| Problem | Orsak | Lösning |
|---|---|---|
| Ersättningen tillämpar inte ny formatering | ApplyFont/ApplyParagraphFormat är inte inställd på FindReplaceOptions | Ställ in relevanta formateringsegenskaper på options-objektet |
| Matchningar hittades oväntat inom spårade ändringsborttagningar | IgnoreDeleted lämnades på standardvärdet | Ställ in IgnoreDeleted = true för att hoppa över raderat revisionsinnehåll |
| Regex-gruppreferenser i ersättningstexten ersattes inte | UseSubstitutions är inte aktiverad | Ställ in UseSubstitutions = true för att möjliggöra $1-stil substitution |
| Callback-baserad ersättning stoppar inte när den förväntas | Callback returnerar Replace/Skip istället för Stop | Returnera 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 / Metod | Beskrivning |
|---|---|
Range.Replace() | Reguljärt uttryck sök/ersätt över ett intervall, med valfritt FindReplaceOptions |
FindReplaceOptions | Konfigurerar matchningsbeteende, formatering och strukturellt omfång för ersättningsoperationer |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Gränssnitt för anpassad per-match-ersättningslogik |
ReplacingArgs | Per-match-data som skickas till IReplacingCallback.Replacing() |
ReplaceAction | Enum som styr utfall per match: Replace, Skip, Stop |