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()surDocument.Rangepour un remplacement à l’échelle du document, ou sur unRangeplus restreint (comme la plage d’une section unique) pour délimiter l’opération. - Définissez
FindWholeWordsOnly = truepour éviter que le terme recherché ne soit trouvé comme sous-chaine d’un mot plus long. - Utilisez
IgnoreFieldCodes = truelorsque 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
IReplacingCallbackplutô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.Stopdepuis 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ème | Cause | Correction |
|---|---|---|
| Le remplacement n’applique pas le nouveau formatage | ApplyFont/ApplyParagraphFormat non défini sur FindReplaceOptions | Dé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 inattendue | IgnoreDeleted laissé à sa valeur par défaut | Dé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ées | UseSubstitutions 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évu | Le callback renvoie Replace/Skip au lieu de Stop | Retourner 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éthode | Description |
|---|---|
Range.Replace() | Recherche/remplacement d’expression régulière sur une plage, avec FindReplaceOptions optionnel |
FindReplaceOptions | Configure le comportement de correspondance, le formatage et la portée structurelle des opérations de remplacement |
FindReplaceDirection | Enum : Forward, Backward |
IReplacingCallback | Interface pour une logique de remplacement personnalisée par correspondance |
ReplacingArgs | Données par correspondance transmises à IReplacingCallback.Replacing() |
ReplaceAction | Enum contrôlant le résultat par match : Replace, Skip, Stop |