Rechercher et remplacer

Rechercher et remplacer

Aspose.Words FOSS pour .NET fournit une recherche et un remplacement basés sur les expressions régulières via Range.Replace(), configurable via FindReplaceOptions et, pour les scénarios avancés, une implémentation personnalisée IReplacingCallback du Aspose.Words.Replacing namespace.


Recherche et remplacement de base

Range.Replace(pattern, replacement) effectue une recherche et un remplacement basés sur les expressions régulières sur toute la plage — le document entier, lorsqu’il est appelé sur Document.Range. La surcharge Replace(pattern, replacement, options) accepte un objet FindReplaceOptions pour un contrôle plus fin : MatchCase et FindWholeWordsOnly ajustent le comportement de correspondance, Direction (une valeur FindReplaceDirection, Forward ou Backward) contrôle la direction de la recherche, et ApplyFont / ApplyParagraphFormat permettent à un remplacement de conserver le nouveau formatage plutôt que seulement le nouveau texte.


Options sensibles au formatage et structurales

FindReplaceOptions comprend plusieurs indicateurs qui déterminent quels éléments du document un match peut traverser ou ignorer : IgnoreDeleted et IgnoreInserted contrôlent la participation du contenu des modifications suivies au matching, IgnoreFields et IgnoreFieldCodes contrôlent la recherche du texte de résultat de champ et des codes de champ, IgnoreFootnotes exclut le contenu des notes de bas de page/notes de fin, et IgnoreStructuredDocumentTags et IgnoreShapes excluent respectivement les contrôles de contenu et le texte des formes. UseSubstitutions active la syntaxe de substitution d’expression régulière (comme $1) dans la chaîne de remplacement. LegacyMode et UseLegacyOrder conservent le comportement de correspondance antérieur pour la compatibilité avec les documents traités par une logique antérieure.


Logique de remplacement personnalisée avec IReplacingCallback

Pour une logique de remplacement qui ne peut pas être exprimée sous forme de chaîne de remplacement fixe, implémentez IReplacingCallback et sa unique méthode Replacing(args), puis assignez l’implémentation à FindReplaceOptions.ReplacingCallback (ou passez-la directement au constructeur FindReplaceOptions(replacingCallback)). Le rappel reçoit un objet ReplacingArgs pour chaque correspondance, exposant Match (la correspondance d’expression régulière sous-jacente), MatchNode / MatchEndNode (les nœuds du document contenant la correspondance), MatchOffset, et une chaîne Replacement paramétrable. Retourner une valeur ReplaceAction depuis le rappel — Replace, Skip ou Stop — contrôle si cette correspondance particulière est remplacée, laissée telle quelle, ou interrompt l’opération de recherche/remplacement entière.


Conseils et bonnes pratiques

  • Appelez Replace() sur Document.Range pour un remplacement à l’échelle du document, ou sur un Range plus restreint (comme la plage d’une section unique) pour délimiter l’opération.
  • Définissez FindWholeWordsOnly = true pour éviter que le terme recherché ne soit trouvé comme sous-chaine d’un mot plus long.
  • Utilisez IgnoreFieldCodes = true lorsque vous souhaitez que le remplacement s’applique aux résultats de champ affichés, et non au texte d’instruction du champ sous-jacent.
  • Privilégiez IReplacingCallback plutôt que le post-traitement lorsque le texte de remplacement dépend du contexte de la correspondance (nœud environnant, formatage ou position) plutôt que d’être une chaîne fixe.
  • Retournez ReplaceAction.Stop depuis un rappel pour terminer prématurément une opération de recherche/remplacement dès qu’une condition est remplie, plutôt que de traiter toutes les correspondances restantes.

Problèmes courants

ProblèmeCauseCorrection
Le remplacement n’applique pas le nouveau formatageApplyFont/ApplyParagraphFormat non défini sur FindReplaceOptionsDéfinissez les propriétés de formatage pertinentes sur l’objet options.
Correspondances trouvées à l’intérieur des suppressions de modifications suivies de façon inattendueIgnoreDeleted laissé à sa valeur par défautDéfinissez IgnoreDeleted = true pour ignorer le contenu des révisions supprimées
Références de groupe regex dans le texte de remplacement non substituéesUseSubstitutions non activéDéfinir UseSubstitutions = true pour activer la substitution de style $1
Le remplacement basé sur le callback ne s’arrête pas comme prévuLe callback renvoie Replace/Skip au lieu de StopRetourner ReplaceAction.Stop à partir de Replacing() lorsque l’opération doit se terminer

FAQ

Le Range.Replace() prend-il en charge les expressions régulières?

Oui — l’argument pattern est une expression régulière, comparée au texte de la plage.

Comment remplacer du texte uniquement dans une section spécifique, et non dans tout le document?

Appelez Replace() sur le Range de cette section au lieu de Document.Range.

Comment faire en sorte que le texte de remplacement dépende de ce qui a été trouvé?

Implémentez IReplacingCallback, lisez les détails de la correspondance depuis ReplacingArgs, affectez ReplacingArgs.Replacement au texte calculé, puis renvoyez ReplaceAction.Replace.

Peut-on rechercher/remplacer en arrière dans le document?

Oui — définissez FindReplaceOptions.Direction à FindReplaceDirection.Backward.


API Reference Résumé

Classe / MéthodeDescription
Range.Replace()Recherche/remplacement d’expression régulière sur une plage, avec FindReplaceOptions optionnel
FindReplaceOptionsConfigure le comportement de correspondance, le formatage et la portée structurelle des opérations de remplacement
FindReplaceDirectionEnum : Forward, Backward
IReplacingCallbackInterface pour une logique de remplacement personnalisée par correspondance
ReplacingArgsDonnées par correspondance transmises à IReplacingCallback.Replacing()
ReplaceActionEnum contrôlant le résultat par match : Replace, Skip, Stop

Voir aussi

 Français