Najít a nahradit

Najít a nahradit

Aspose.Words FOSS pro .NET poskytuje hledání a nahrazování založené na regulárních výrazech prostřednictvím Range.Replace(), konfigurovatelné pomocí FindReplaceOptions a pro pokročilé scénáře vlastní implementaci IReplacingCallback z jmenného prostoru Aspose.Words.Replacing.


Základní hledání a nahrazování

Range.Replace(pattern, replacement) provádí hledání a nahrazování regulárních výrazů napříč rozsahem — celým dokumentem, když je voláno na Document.Range. Přetížení Replace(pattern, replacement, options) přijímá objekt FindReplaceOptions pro jemnější řízení: MatchCase a FindWholeWordsOnly upravují chování shody, Direction (hodnota FindReplaceDirection, Forward nebo Backward) řídí směr hledání a ApplyFont / ApplyParagraphFormat umožňují, aby nahrazení přeneslo nové formátování místo pouhého nového textu.


Možnosti citlivé na formátování a strukturu

FindReplaceOptions obsahuje několik příznaků, které určují, které konstrukty dokumentu může shoda překročit nebo ignorovat: IgnoreDeleted a IgnoreInserted řídí, zda se obsah ssledovanými změnami účastní shody, IgnoreFields a IgnoreFieldCodes určují, zda se prohledává text výsledku polí a kódy polí, IgnoreFootnotes vylučuje obsah poznámek pod čarou/pod koncem, a IgnoreStructuredDocumentTags a IgnoreShapes vylučují respektive ovládací prvky obsahu a text tvaru. UseSubstitutions umožňuje syntaxi substituce regulárního výrazu (jako $1) v řetězci náhrady. LegacyMode a UseLegacyOrder zachovávají starší chování shody pro kompatibilitu s dokumenty zpracovanými dřívější logikou.


Vlastní logika nahrazování s IReplacingCallback

Pro logiku nahrazování, kterou nelze vyjádřit jako pevný řetězec nahrazení, implementujte IReplacingCallback a jeho jedinou metodu Replacing(args), poté přiřaďte implementaci k FindReplaceOptions.ReplacingCallback (nebo ji předáte přímo konstruktoru FindReplaceOptions(replacingCallback)). Callback dostane objekt ReplacingArgs pro každý výskyt, který zpřístupňuje Match (základní shodu regulárního výrazu), MatchNode / MatchEndNode (uzly dokumentu obsahující shodu), MatchOffset a nastavitelný řetězec Replacement. Vrácení hodnoty ReplaceAction z callbacku — Replace, Skip nebo Stop — řídí, zda bude daný výskyt nahrazen, ponechán beze změny nebo zastaví celou operaci hledání/nahrazení.


Tipy a osvědčené postupy

  • Vyvolejte Replace() na Document.Range pro nahrazování v celém dokumentu, nebo na užší Range (např. rozsah jedné sekce), abyste operaci omezili.
  • Nastavte FindWholeWordsOnly = true, aby se zabránilo shodě hledaného výrazu jako podřetězce delšího slova.
  • Použijte IgnoreFieldCodes = true, když chcete, aby nahrazování působilo na zobrazené výsledky pole, nikoli na základní text instrukce pole.
  • Upřednostněte IReplacingCallback před následným zpracováním, když závisí text nahrazení na kontextu shody (okolní uzel, formátování nebo pozice) místo pevného řetězce.
  • Vrátíte ReplaceAction.Stop z callbacku, abyste předčasně ukončili operaci hledání/nahrazování, jakmile je podmínka splněna, místo zpracování všech zbývajících shod.

Časté problémy

ProblémPříčinaOprava
Náhrada nepoužívá nové formátováníApplyFont/ApplyParagraphFormat není nastaveno na FindReplaceOptionsNastavte příslušné formátovací vlastnosti v objektu options
Neočekávaně nalezeny shody uvnitř sledovaných změn mazáníIgnoreDeleted zůstalo na výchozím nastaveníNastavte IgnoreDeleted = true pro přeskočení smazaného obsahu revize
Odkazy na regexové skupiny v náhradním textu nejsou nahrazenyUseSubstitutions není povolenoNastavte UseSubstitutions = true pro povolení substituce ve stylu $1
Nahrazení založené na zpětném volání se neukončuje podle očekáváníZpětné volání vrací Replace/Skip místo StopVraťte ReplaceAction.Stop z Replacing(), když by operace měla skončit

FAQ

Podporuje Range.Replace() regulární výrazy?

Ano — argument pattern je regulární výraz, který se porovnává s textem rozsahu.

Jak nahradit text pouze v konkrétní sekci, ne v celém dokumentu?

Zavolejte Replace() na Range této sekce místo Document.Range.

Jak zajistit, aby náhradní text závisel na tom, co bylo zachyceno?

Implementujte IReplacingCallback, načtěte podrobnosti shody z ReplacingArgs, nastavte ReplacingArgs.Replacement na vypočtený text a vraťte ReplaceAction.Replace.

Může vyhledávání a nahrazování probíhat pozpátku v dokumentu?

Ano — nastavte FindReplaceOptions.Direction na FindReplaceDirection.Backward.


API Reference Shrnutí

Třída / MetodaPopis:
Range.Replace()Vyhledávání/nahrazování regulárním výrazem v rozsahu, s volitelným FindReplaceOptions
FindReplaceOptionsKonfiguruje chování shody, formátování a strukturaální rozsah pro operace nahrazení
FindReplaceDirectionVýčtový typ: Forward, Backward
IReplacingCallbackRozhraní pro vlastní logiku nahrazování pro každou shodu
ReplacingArgsData pro každou shodu předávaná do IReplacingCallback.Replacing()
ReplaceActionEnum řídící výsledek pro každou shodu: Replace, Skip, Stop

Viz také:

 Čeština