Trova e sostituisci

Trova e sostituisci

Aspose.Words FOSS per .NET fornisce ricerca e sostituzione basata su espressioni regolari tramite Range.Replace(), configurabile tramite FindReplaceOptions e, per scenari avanzati, un’implementazione personalizzata di IReplacingCallback dal namespace Aspose.Words.Replacing.


Ricerca e sostituzione di base

Range.Replace(pattern, replacement) esegue una ricerca e sostituzione basata su espressioni regolari sull’intervallo — l’intero documento, quando viene chiamato su Document.Range. La sovraccarico Replace(pattern, replacement, options) accetta un oggetto FindReplaceOptions per un controllo più fine: MatchCase e FindWholeWordsOnly regolano il comportamento della corrispondenza, Direction (un valore FindReplaceDirection, Forward o Backward) controlla la direzione della ricerca, e ApplyFont / ApplyParagraphFormat consentono a una sostituzione di trasportare una nuova formattazione anziché solo nuovo testo.


Opzioni consapevoli della formattazione e strutturali

FindReplaceOptions include diversi flag che determinano quali costrutti del documento una corrispondenza può attraversare o ignorare: IgnoreDeleted e IgnoreInserted controllano se il contenuto delle modifiche tracciate partecipa alla corrispondenza, IgnoreFields e IgnoreFieldCodes controllano se il testo del risultato del campo e i codici del campo vengono ricercati, IgnoreFootnotes esclude il contenuto di note a piè di pagina/note di chiusura, e IgnoreStructuredDocumentTags e IgnoreShapes escludono rispettivamente i controlli di contenuto e il testo delle forme. UseSubstitutions abilita la sintassi di sostituzione con espressioni regolari (come $1) nella stringa di sostituzione. LegacyMode e UseLegacyOrder preservano il comportamento di corrispondenza più vecchio per compatibilità con documenti elaborati da logiche precedenti.


Logica di sostituzione personalizzata con IReplacingCallback

Per la logica di sostituzione che non può essere espressa come una stringa di sostituzione fissa, implementa IReplacingCallback e il suo unico metodo Replacing(args), quindi assegna l’implementazione a FindReplaceOptions.ReplacingCallback (o passala direttamente al costruttore FindReplaceOptions(replacingCallback)). Il callback riceve un oggetto ReplacingArgs per ogni corrispondenza, esponendo Match (la corrispondenza dell’espressione regolare sottostante), MatchNode / MatchEndNode (i nodi del documento che contengono la corrispondenza), MatchOffset, e una stringa Replacement impostabile. Restituire un valore ReplaceAction dal callback — Replace, Skip o Stop — controlla se quella particolare corrispondenza viene sostituita, lasciata invariata o interrompe l’intera operazione di ricerca/sostituzione.


Suggerimenti e migliori pratiche

  • Chiama Replace() su Document.Range per una sostituzione a livello di documento, oppure su un Range più ristretto (come l’intervallo di una singola sezione) per limitare l’operazione.
  • Imposta FindWholeWordsOnly = true per evitare di far corrispondere un termine di ricerca come sottostringa di una parola più lunga.
  • Usa IgnoreFieldCodes = true quando desideri che la sostituzione agisca sui risultati visualizzati del campo, non sul testo dell’istruzione del campo sottostante.
  • Preferisci IReplacingCallback rispetto al post-processing quando il testo di sostituzione dipende dal contesto della corrispondenza (nodo circostante, formattazione o posizione) anziché essere una stringa fissa.
  • Restituisci ReplaceAction.Stop da un callback per terminare anticipatamente un’operazione di ricerca/sostituzione una volta soddisfatta una condizione, anziché elaborare tutte le corrispondenze rimanenti.

Problemi comuni

ProblemaCausaCorrezione
La sostituzione non applica la nuova formattazioneApplyFont/ApplyParagraphFormat non impostato su FindReplaceOptionsImposta le proprietà di formattazione pertinenti sull’oggetto options
Corrispondenze trovate all’interno di eliminazioni di modifiche tracciate inaspettatamenteIgnoreDeleted lasciato al suo valore predefinitoImposta IgnoreDeleted = true per ignorare il contenuto della revisione eliminata
Riferimenti ai gruppi regex nel testo di sostituzione non sostituitiUseSubstitutions non abilitatoImposta UseSubstitutions = true per abilitare la sostituzione in stile $1
La sostituzione basata su callback non si ferma come previstoIl callback restituisce Replace/Skip invece di StopRestituisci ReplaceAction.Stop da Replacing() quando l’operazione deve terminare

FAQ

Il Range.Replace() supporta le espressioni regolari?

Sì — l’argomento pattern è un’espressione regolare, confrontata con il testo dell’intervallo.

Come posso sostituire il testo solo all’interno di una sezione specifica, non dell’intero documento?

Chiama Replace() sul Range di quella sezione invece di Document.Range.

Come posso far dipendere il testo di sostituzione da ciò che è stato abbinato?

Implementa IReplacingCallback, leggi i dettagli della corrispondenza da ReplacingArgs, imposta ReplacingArgs.Replacement sul testo calcolato e restituisci ReplaceAction.Replace.

È possibile eseguire la ricerca trova/sostituisci all’indietro nel documento?

Sì — imposta FindReplaceOptions.Direction su FindReplaceDirection.Backward.


API Reference Riepilogo

Classe / MetodoDescrizione
Range.Replace()Trova/sostituisci con espressione regolare su un intervallo, con FindReplaceOptions opzionale
FindReplaceOptionsConfigura il comportamento della corrispondenza, la formattazione e l’ambito strutturale per le operazioni di sostituzione
FindReplaceDirectionEnum: Forward, Backward
IReplacingCallbackInterfaccia per la logica di sostituzione personalizzata per corrispondenza
ReplacingArgsDati per corrispondenza passati a IReplacingCallback.Replacing()
ReplaceActionEnum che controlla l’esito per partita: Replace, Skip, Stop

Vedi anche

 Italiano