Keresés és csere
Keresés és csere
Aspose.Words FOSS a .NET számára reguláris-kifejezés alapú keresést és cserét biztosít a(z) Range.Replace() segítségével, amely a(z) FindReplaceOptions révén konfigurálható, és haladó esetekben egy egyéni IReplacingCallback megvalósítást a(z) Aspose.Words.Replacing névtérből.
Alapvető keresés és csere
Range.Replace(pattern, replacement) reguláris-kifejezés keresés-csere műveletet hajt végre az egész tartományon — a teljes dokumentumon, ha a(z) Document.Range-en van meghívva. A(z) Replace(pattern, replacement, options) túlterhelés egy FindReplaceOptions objektumot fogad a finomabb vezérléshez: MatchCase és FindWholeWordsOnly módosítják az egyezés viselkedését, a(z) Direction (egy FindReplaceDirection érték, Forward vagy Backward) irányítja a keresés irányát, és a ApplyFont / ApplyParagraphFormat lehetővé teszi, hogy a csere új formázást vigyen magával, nem csak új szöveget.
Formázat-érzékeny és szerkezeti beállítások
FindReplaceOptions több jelzőt tartalmaz, amelyek meghatározzák, hogy a dokumentum mely elemei keresztülmennek vagy mellőződnek egy egyezés során: IgnoreDeleted és IgnoreInserted szabályozzák, hogy a nyomon követett változtatások tartalma részt vegyen-e a keresésben, IgnoreFields és IgnoreFieldCodes azt, hogy a mezőeredmény szöveg és a mezőkódok legyenek-e keresve, IgnoreFootnotes kizárja a lábjegyzet/végjegyzet tartalmat, a IgnoreStructuredDocumentTags és IgnoreShapes pedig rendre a tartalomvezérlőket és a forma szöveget zárják ki. UseSubstitutions engedélyezi a reguláris-kifejezés helyettesítési szintaxist (például $1) a cserekarakterláncban. LegacyMode és UseLegacyOrder megőrzik a régebbi egyezési viselkedést a korábbi logikával feldolgozott dokumentumok kompatibilitása érdekében.
Egyedi csere logika az IReplacingCallback segítségével
Az olyan helyettesítési logikához, amelyet nem lehet rögzített helyettesítő karakterláncként kifejezni, valósítsa meg a IReplacingCallback és annak egyetlen Replacing(args) metódusát, majd rendelje hozzá a megvalósítást a FindReplaceOptions.ReplacingCallback (vagy adja át közvetlenül a FindReplaceOptions(replacingCallback) konstruktorának). A visszahívás minden egyezéshez egy ReplacingArgs objektumot kap, amely a Match (az alapvető reguláris kifejezés egyezés), a MatchNode / MatchEndNode (az egyezést tartalmazó dokumentumcsomópontok), MatchOffset, valamint egy beállítható Replacement karakterláncot teszi elérhetővé. A visszahívásból egy ReplaceAction érték visszaadása — Replace, Skip vagy Stop — meghatározza, hogy az adott egyezés helyettesítve legyen, változatlanul maradjon, vagy leállítsa a teljes keresés/csere műveletet.
Tippek és bevált gyakorlatok
- Hívja meg a
Replace()-t aDocument.Range-on a dokumentum egészére kiterjedő helyettesítéshez, vagy egy szűkebbRange-on (például egyetlen szakasz tartományán) a művelet hatókörének meghatározásához. - Állítsa be a
FindWholeWordsOnly = true-t, hogy elkerülje a keresőkifejezés hosszabb szó részhalmazaként való egyezését. - Használja a
IgnoreFieldCodes = true-t, ha azt szeretné, hogy a helyettesítés a megjelenített mezőeredményeken működjön, nem pedig az alapul szolgáló mezőutasítás szövegén. - Részesítse előnyben a
IReplacingCallback-t a post-processzálással szemben, ha a helyettesítő szöveg a találati kontextustól (környező csomópont, formázás vagy pozíció) függ, ahelyett, hogy rögzített karakterlánc lenne. - Adja vissza a
ReplaceAction.Stop-t egy visszahívásból, hogy a feltétel teljesülésekor korán befejezze a keresés/csere műveletet, ahelyett, hogy minden további egyezést feldolgozna.
Gyakori problémák
| Probléma | Oka | Javítás |
|---|---|---|
| A csere nem alkalmaz új formázást | ApplyFont/ApplyParagraphFormat nincs beállítva a FindReplaceOptions | Állítsa be a megfelelő formázási tulajdonságokat az options objektumon. |
| Váratlanul egyezéseket észlelt a nyomon követett változtatások törléseiben | IgnoreDeleted alapértelmezett értéken maradt | Állítsa be IgnoreDeleted = true a törölt revízió tartalmának kihagyásához |
| A reguláris kifejezés csoporthivatkozásai a helyettesítő szövegben nincsenek behelyettesítve | UseSubstitutions nincs engedélyezve | Adja meg a(z) UseSubstitutions = true értékét, hogy engedélyezze a(z) $1 stílusú helyettesítést |
| A visszahíváson alapuló helyettesítés nem áll le, amikor elvárnák | A visszahívás Replace/Skip értéket ad vissza Stop helyett | Vissza kell adni a(z) ReplaceAction.Stop értéket a(z) Replacing() során, ha a műveletnek véget kell érnie |
FAQ
Támogatja a(z) Range.Replace() a reguláris kifejezéseket?
Igen — a(z) pattern argumentum egy reguláris kifejezés, amely a tartomány szövegére van alkalmazva.
Hogyan cserélhetem le a szöveget csak egy adott szakaszon belül, nem az egész dokumentumban?
Hívja meg a(z) Replace() az adott szakasz Range elemén, a Document.Range helyett.
Hogyan tehetem a helyettesítő szöveget a megtalált részlet függővé?
Valósítsa meg a(z) IReplacingCallback függvényt, olvassa ki a találat részleteit a(z) ReplacingArgs változóból, adja ReplacingArgs.Replacement értékének a kiszámított szöveget, és adja vissza a(z) ReplaceAction.Replace értéket.
Lehet-e visszafelé keresni és cserélni a dokumentumban?
Igen — állítsa be a FindReplaceOptions.Direction értékét FindReplaceDirection.Backward.
API Reference összegzés
| Osztály / Metódus | Leírás |
|---|---|
Range.Replace() | Reguláris kifejezés keresés/csere egy tartományban, opcionális FindReplaceOptions paraméterrel |
FindReplaceOptions | Beállítja a helyettesítési műveletekhez a találat viselkedését, formázását és szerkezeti hatókörét |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Interfész egyedi egyes találatok helyettesítési logikájához |
ReplacingArgs | Egyes találatokra vonatkozó adat, amelyet a IReplacingCallback.Replacing() kap |
ReplaceAction | Enum, amely a meccsenkénti kimenetet szabályozza: Replace, Skip, Stop |