Person typing on the keyboard of the Acer Aspire Vero 15.
Agence web » Actualités du digital » 8 tâches que vous pouvez automatiser à l'aide de Regex

8 tâches que vous pouvez automatiser à l'aide de Regex

Regex est un outil fantastique si vous savez comment l'utiliser. Malheureusement, ce n’est pas la chose la plus facile à interpréter au monde. Cependant, avec l’expression appropriée, vous pouvez automatiser tout ce que vous voulez. Regex est idéal pour rechercher, faire correspondre et manipuler du texte, comme dans ces huit cas.

Pourquoi utiliser Regex ?

Regex (abréviation de REGular EXpressions) facilite le nettoyage et la standardisation. Bien qu'il soit polyvalent en tant qu'outil d'édition, il a ses limites en termes d'application. La meilleure façon de considérer les expressions régulières est de les considérer comme une recherche par caractère générique ou une recherche et remplacement super puissante que vous pouvez utiliser chaque fois que vous en avez besoin, là où elle est prise en charge, bien sûr. Microsoft Excel a récemment commencé à prendre en charge les expressions régulières, ce qui en fait une compétence utile à apprendre.

Mais à quoi peut servir exactement une regex ? Examinons huit exemples courants.

Certains programmes ne prennent pas en charge les expressions régulières et d'autres ne les prennent en charge que partiellement. Des applications comme Notepad++ sont parfaites pour exécuter des commandes regex avec leurs fonctions de recherche et de remplacement.

Correction du texte PDF copié-collé

Nous sommes tous passés par là : copier des éléments d'un PDF, puis les coller dans votre propre document, pour ensuite voir des espacements et des artefacts étranges apparaître avec la copie. Mais saviez-vous que les regex pouvaient vous aider ? Entrez cette commande dans votre fonction Rechercher et remplacer :

        Find: (^Srn){2,}|s*r?ns*r?ns*
Replace: n

Cette expression régulière rendra votre éditeur de texte :

  • Supprimer toute instance de plusieurs espaces

  • Réduit plusieurs sauts de ligne à un seul saut de ligne

  • Supprime les espaces de fin

Cela devrait nettoyer tout texte copié que vous avez en quelque chose d'utile.

Renommer en masse les fichiers téléchargés

Lors de plus d'un incident malheureux, j'ai téléchargé un ensemble de fichiers et ils étaient accompagnés de noms étranges. Si vous disposez d'un outil de renommage en masse comme Advanced Renamer, vous pouvez utiliser une expression régulière pour nettoyer ces noms de fichiers en quelque chose de plus reconnaissable. Si vous avez une série de fichiers avec des symboles partout, vous pouvez utiliser votre renamer avec cette regex :

        Find: (^a-zA-Z0-9-.)
Replace:

Cela conserve les chiffres, les points et les lettres tels qu'ils sont, mais remplace tout le reste par des tirets.

Formatage des devises

Disons que vous avez un fichier contenant une tonne de devises dans différents formats. Vous ne voulez pas parcourir manuellement chacune de ces devises et la corriger au format souhaité, surtout si elles sont dans plusieurs formats étranges. Voici ce que vous utiliserez pour votre regex :

        Find: $?s*(d+(?:,d{3})*(?:.d{2})?)s*(?:USD|dollars?)?
Replace: $1

Cette expression régulière parcourra votre fichier de devises et nettoiera tout pour vous donner un signe dollar, une entrée de devise et deux décimales pour les centimes.

Standardiser les formats de date

J'ai été dans plusieurs situations où j'ai dû extraire des dates dans un format standardisé, comme les déplacer d'un texte vers une base de données. Lorsque vous êtes confronté à quelque chose comme ça, vous pouvez utiliser une expression régulière pour rechercher et extraire des données dans un format simplifié (dans ce cas, elles devraient être au format AAAA-MM-JJ). L'expression régulière pour cela serait :

        Find: b(?:d{1,2}(-/.)d{1,2}(-/.)d{2,4})|(?:(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(a-z)*(s.-)?d{1,2}(?:st|nd|rd|th)?(s,.-)?d{2,4})b
    

Cela devrait rechercher l'intégralité du document et fixer toutes les dates dans ce format standardisé.

Lorsque vous copiez quelque chose à partir du Web, des balises HTML y sont parfois attachées. Heureusement, regex dispose d'une méthode pratique pour supprimer les balises HTML d'un document :

        Find: <(^>)+>|&(^;)+;|s*ns*
Replace: n

Cette expression régulière passera au crible le document, trouvera les balises HTML et les effacera, ainsi que les sauts de ligne supplémentaires et d'autres entités HTML (comme « & »). Désormais, vous pouvez facilement nettoyer un document comme celui-ci en recherchant simplement les balises et en les remplaçant par quelque chose de vide avec cette expression régulière :

        Find: <(^>)+>
Replace: (empty)

Cependant, si votre document utilise des balises HTML, un formatage ou des entités étranges, vous pourriez rencontrer des problèmes. La première regex est un nettoyage général, et la seconde est une recherche plus approfondie.

Parfois, vous avez un document avec des URL enfouies dans le texte. L'extraction de ces URL ne devrait pas nécessiter une recherche manuelle dans l'ensemble du document, et les expressions régulières vous feront gagner du temps. Nous savons déjà que les URL commencent toujours par http ou https, et nous pouvons utiliser ces connaissances dans notre regex :

        Find: (https?://)?((w-)+(.(w-)+)+.?(:d+)?(/S*)?)|((www.)?(w-)+(.(w-)+)+.?(:d+)?(/S*)?)
    

Bien que cet extracteur trouve vos URL, il présente quelques problèmes. Si vous avez des URL mal formées ou quoi que ce soit sans préfixes http ou https, vous ne verrez pas l'URL. Vous ne recevrez pas non plus d'e-mails avec ce modèle, mais il en existe un autre que vous pouvez utiliser spécifiquement pour les e-mails.

L'un des problèmes les plus courants que je rencontre lors de la récupération de données ou de la validation de listes de diffusion est la réception d'e-mails à partir d'un fichier texte. Les e-mails ont généralement un modèle qui permet à l'expression régulière d'interagir facilement avec le fichier texte. Pour une fonction de recherche d'e-mails, nous ferons quelque chose comme ceci :

        Find: (?:(a-z0-9!
    

Cela peut sembler beaucoup, mais il recherche essentiellement tout ce qui a le modèle @.com. Aussi robuste que soit l'expression régulière, elle n'est pas parfaite. Il manquera tous les e-mails commençant par un point, et tout ce qui n'est pas correctement formaté en tant qu'e-mail sera également ignoré.

Lors du déplacement de données d'un formulaire vers ou depuis une base de données, vous devez parfois résoudre certains problèmes de formatage. Les réseaux sociaux en sont un excellent exemple. L'expression régulière pour faire cela est :

        Find: (?:^|(^@w))(@s)*(w{1,30})
Replace: @$1

Il s'agit du cas d'utilisation le plus robuste pour le formatage des identifiants de réseaux sociaux, mais chaque plate-forme a ses propres nuances pour les noms d'utilisateur. Vous ne pouvez pas écrire de vérification d'erreurs pour ces descripteurs spécifiques, sauf si vous utilisez cette expression régulière dans un script Python, par exemple. Même ainsi, déboguer votre code Python avec regex peut être un peu plus compliqué.

Regex n'est pas une solution miracle

On dit que si vous avez un marteau, chaque problème commence à ressembler à un clou. En tant que codeur expérimenté, je peux dire que c'est vrai à 100 % en ce qui concerne les regex. Il existe plusieurs endroits en ligne qui peuvent vous aider à apprendre les regex, mais vous devez utiliser ces connaissances avec parcimonie.

L'inclusion d'une expression régulière dans votre code peut compliquer votre processus de débogage. Ils ne se prêtent pas non plus aux commentaires, ce qui rend plus difficile le partage de code avec d'autres. Enfin, ils font partie d'un système d'automatisation ; si les données sources sont mauvaises, les résultats le seront également. Bien que les expressions régulières soient un outil puissant, elles sont meilleures pour certaines choses que pour d’autres.

★★★★★