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()naDocument.Rangepro 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
IReplacingCallbackpř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.Stopz 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ém | Příčina | Oprava |
|---|---|---|
| Náhrada nepoužívá nové formátování | ApplyFont/ApplyParagraphFormat není nastaveno na FindReplaceOptions | Nastavte 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 nahrazeny | UseSubstitutions není povoleno | Nastavte 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 Stop | Vrať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 / Metoda | Popis: |
|---|---|
Range.Replace() | Vyhledávání/nahrazování regulárním výrazem v rozsahu, s volitelným FindReplaceOptions |
FindReplaceOptions | Konfiguruje chování shody, formátování a strukturaální rozsah pro operace nahrazení |
FindReplaceDirection | Výčtový typ: Forward, Backward |
IReplacingCallback | Rozhraní pro vlastní logiku nahrazování pro každou shodu |
ReplacingArgs | Data pro každou shodu předávaná do IReplacingCallback.Replacing() |
ReplaceAction | Enum řídící výsledek pro každou shodu: Replace, Skip, Stop |