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() pe Document.Range pentru înlocuire la nivelul întregului document sau pe un Range mai restrâns (cum ar fi intervalul unei singure secțiuni) pentru a delimita operația.
  • Setează FindWholeWordsOnly = true pentru a evita potrivirea unui termen de căutare ca subșir al unui cuvânt mai lung.
  • Folosește IgnoreFieldCodes = true câ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.Stop dintr-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 FindReplaceOptionsSetează proprietățile de formatare relevante pe obiectul options
Potriviri găsite în interiorul ștergerilor de modificări urmărite, neașteptatIgnoreDeleted 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 înlocuiteUseSubstitutions nu este activatSetați UseSubstitutions = true pentru a activa substituția în stil $1
Înlocuirea bazată pe callback nu se oprește când este de așteptatCallback-ul returnează Replace/Skip în loc de StopReturnaț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
FindReplaceOptionsConfigurează comportamentul de potrivire, formatarea și domeniul structural pentru operațiunile de înlocuire
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackInterfață pentru logică personalizată de înlocuire per potrivire
ReplacingArgsDate per potrivire transmise către IReplacingCallback.Replacing()
ReplaceActionEnum care controlează rezultatul pe meci: Replace, Skip, Stop

Vezi și:

 Română