Caută și înlocuiește
Caută și înlocuiește
Aspose.Words FOSS pentru .NET oferă căutare și înlocuire bazate pe expresii regulate prin Range.Replace(), configurabil prin FindReplaceOptions și, pentru scenarii avansate, o implementare personalizată IReplacingCallback din spațiul de nume Aspose.Words.Replacing.
Căutare și înlocuire de bază
Range.Replace(pattern, replacement) efectuează o căutare și înlocuire cu expresii regulate pe interval — întregul document, când este apelat pe Document.Range. Suprasarcina Replace(pattern, replacement, options) acceptă un obiect FindReplaceOptions pentru un control mai fin: MatchCase și FindWholeWordsOnly ajustează comportamentul potrivirii, Direction (o valoare FindReplaceDirection, Forward sau Backward) controlează direcția căutării, iar ApplyFont / ApplyParagraphFormat permit ca o înlocuire să transporte formatare nouă în loc de doar text nou.
Opțiuni conștiente de formatare și structurale
FindReplaceOptions includează mai multe steaguri care determină ce construcții ale documentului poate traversa sau ignora o potrivire: IgnoreDeleted și IgnoreInserted controlează dacă conținutul cu modificări urmărite participă la potrivire, IgnoreFields și IgnoreFieldCodes controlează dacă textul rezultat al câmpului și codurile câmpului sunt căutate, IgnoreFootnotes exclude conținutul notei de subsol/final, iar IgnoreStructuredDocumentTags și IgnoreShapes exclud controalele de conținut și, respectiv, textul formei. UseSubstitutions permite sintaxa de substituție cu expresii regulate (ca $1) în șirul de înlocuire. LegacyMode și UseLegacyOrder păstrează comportamentul de potrivire mai vechi pentru compatibilitate cu documentele procesate de logică anterioară.
Logică personalizată de înlocuire cu IReplacingCallback
Pentru logica de înlocuire care nu poate fi exprimată ca un șir de înlocuire fix, implementează IReplacingCallback și metoda sa unică Replacing(args), apoi atribuie implementarea lui FindReplaceOptions.ReplacingCallback (sau transmite-o direct constructorului FindReplaceOptions(replacingCallback)). Callback-ul primește un obiect ReplacingArgs pentru fiecare potrivire, expunând Match (potrivirea efectivă a expresiei regulate), MatchNode / MatchEndNode (nodurile documentului care conțin potrivirea), MatchOffset, și un șir Replacement configurabil. Returnarea unei valori ReplaceAction din callback — Replace, Skip sau Stop — controlează dacă acea potrivire este înlocuită, lăsată neschimbată sau oprește întreaga operație de căutare/înlocuire.
Sfaturi și practici recomandate
- Apelează
Replace()peDocument.Rangepentru înlocuire la nivelul întregului document sau pe unRangemai restrâns (cum ar fi intervalul unei singure secțiuni) pentru a delimita operația. - Setează
FindWholeWordsOnly = truepentru a evita potrivirea unui termen de căutare ca subșir al unui cuvânt mai lung. - Folosește
IgnoreFieldCodes = truecând dorești ca înlocuirea să acționeze asupra rezultatelor câmpului afișate, nu asupra textului instrucțiunii câmpului subiacente. - Preferă
IReplacingCallbackîn locul post-procesării când textul de înlocuire depinde de contextul potrivirii (nodul înconjurător, formatarea sau poziția) în loc să fie un șir fix. - Returnează
ReplaceAction.Stopdintr-un callback pentru a încheia devreme o operație de căutare/înlocuire odată ce o condiție este îndeplinită, în loc să procesezi fiecare potrivire rămasă.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
| Înlocuirea nu aplică formatarea nouă | ApplyFont/ApplyParagraphFormat nu este setat pe FindReplaceOptions | Setează proprietățile de formatare relevante pe obiectul options |
| Potriviri găsite în interiorul ștergerilor de modificări urmărite, neașteptat | IgnoreDeleted rămas la valoarea implicită | Setați IgnoreDeleted = true pentru a omite conținutul reviziei șterse |
| Referințele grupului Regex în textul de înlocuire nu sunt înlocuite | UseSubstitutions nu este activat | Setați UseSubstitutions = true pentru a activa substituția în stil $1 |
| Înlocuirea bazată pe callback nu se oprește când este de așteptat | Callback-ul returnează Replace/Skip în loc de Stop | Returnați ReplaceAction.Stop din Replacing() când operația ar trebui să se încheie |
FAQ
Suportă Range.Replace() expresii regulate?
Da — argumentul pattern este o expresie regulată, comparată cu textul intervalului.
Cum pot înlocui textul doar într-o secțiune specifică, nu în întregul document?
Apelă Replace() pe Range secțiunii respective în loc de Document.Range.
Cum pot face ca textul de înlocuire să depindă de ceea ce a fost potrivit?
Implementează IReplacingCallback, citește detaliile potrivirii din ReplacingArgs, setează ReplacingArgs.Replacement la textul calculat și returnează ReplaceAction.Replace.
Poate căutarea/înlocuirea să se facă înapoi prin document?
Da — setează FindReplaceOptions.Direction la FindReplaceDirection.Backward.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
Range.Replace() | Căutare/înlocuire cu expresii regulate pe un interval, cu FindReplaceOptions opțional |
FindReplaceOptions | Configurează comportamentul de potrivire, formatarea și domeniul structural pentru operațiunile de înlocuire |
FindReplaceDirection | Enum: Forward, Backward |
IReplacingCallback | Interfață pentru logică personalizată de înlocuire per potrivire |
ReplacingArgs | Date per potrivire transmise către IReplacingCallback.Replacing() |
ReplaceAction | Enum care controlează rezultatul pe meci: Replace, Skip, Stop |