Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

Base de Connaissance

Apprenez auprès des experts.
TIPS de la semaine

Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !

Voir l'index

Maîtrise de l'outil | Regex

Community_Admin
Alteryx
Alteryx
Créé

Cet article fait partie de la série Maîtrise des outils, une compilation de contributions à la Base de connaissances visant à présenter divers exemples d'utilisation des outils Designer. Ici, nous allons nous pencher sur les utilisations de l'outil Regex dans le cadre de notre apprentissage de la maîtrise d'Alteryx Designer :

 

RegEx.png

L'outil Regex est un peu comme le couteau suisse de l'armée d'analyse dans Alteryx ; il y a beaucoup de façons dont vous pouvez l’utiliser pour faire les choses plus rapidement ou plus efficacement, mais même si vous utilisez simplement la lame, il est encore immensément utile. Parfois, c’est tout ce dont vous avez besoin, mais si vous prenez le temps de comprendre comment utiliser quelques autres outils dans ce couteau, vous commencerez à voir qu’il n’y a pas grand-chose que vous ne pouvez pas faire avec.

 

 

mr bean.pngmacgyver.jpg

Avant et après l'utilisation de l'outil Regex.

 

Regex : À quoi cela sert-il ?

 

Regex est une abréviation du terme Regular Expression (Expression régulière),  et vous pouvez y penser comme si c’était une autre langue. Elle utilise des symboles comme n’importe quelle autre langue, mais dans les expressions régulières, ces symboles sont utilisés pour faire correspondre des séquences de lettres, de chiffres ou de caractères dans un texte. C'est une langue qui consiste à reconnaître les modèles.

 

Les humains sont vraiment bons à ce genre de chose - disons que je vous montre ce bloc de texte :

 

3345 Michelson Drive, suite 400, Irvine, ca 92612

12303 Airport Way, suite 250, Broomfield, co 80021

Deux North Riverside Plaza, suite 1430, Chicago, il 60606

 

Vous n'auriez aucun problème à me dire que ce sont des adresses, et quelle partie est un numéro de rue ou un nom de ville. Mais un ordinateur ne verrait qu’un bloc de texte et ne vérifierait pas s’il possède des adresses. Regex est un moyen de « reconnaître » des données utiles dans un texte. Nous allons « traduire » cela dans une version Regex :

 

3345 ^/d+ Le ^ signifie le début d'une ligne dans Regex, donc c'est une bonne pratique pour l'inclure avec votre modèle initial. Ici, notre modèle est /d qui signifie «n'importe quel caractère numérique» (0-9). Le + signifie que nous voulons correspondre à l'expression précédente une ou plusieurs fois. Puisque la première partie de l'adresse est un numéro de rue, cela nous permet d’avoir un certain nombre de longueur.
Michelson Drive [^/d]+ Pour correspondre avec la rue, nous devons permettre à notre expression de prendre plusieurs mots de caractères, y compris un certain nombre d'espaces, puisque les noms de rues ont généralement plus d’un mot. Une façon de faire cette correspondance est à travers ce que nous ne nous attendons pas à trouver, en utilisant [^ ...]. Cette notation de regroupement correspond à « tout caractère non listé ici ». À la fin, cela signifie faire correspondre un ou plusieurs fois tout caractère autre qu’un nombre.
Suite 400 .* La partie suivante de l'adresse est un numéro de suite, qui peut être présent ou non, et qui pourrait potentiellement prendre diverses conventions de dénomination. Afin de définir une expression flexible pour correspondre à tout ce que nous avons ici, nous pouvons utiliser un . pour correspondre à « n'importe quel caractère ». Le * signifie alors  que vous pouvez faire correspondre n’importe quel caractère zéro ou plusieurs fois.
Irvine [^/d]+ Comme avant, cela signifie simplement « n'importe quel caractère qui n'est pas un nombre ».
CA /u{2} Pour la correspondance à l’état, nous pouvons utiliser /u ce qui signifie « toute lettre majuscule ». Puisque nous nous attendons à ce que ce soit toujours une séquence de deux lettres, nous pouvons également spécifier la longueur du match en utilisant {...} après notre expression, c’est-à-dire « correspondre à n’importe quelle deux lettres majuscules ».
92612 /d{5}$

Le code postal sera également composé de 5 chiffres, donc nous pouvons faire quelque chose de similaire pour dire « correspondre avec cinq caractères numériques ». Ensuite, nous pouvons ajouter pour dire que cela devrait être la fin de la ligne actuelle.

 

 

Outils de base

 

Il y a beaucoup de symboles utilisés pour élaborer des expressions Regex, mais Alteryx vous fournit un bon « Aide-mémoir » dans l’outil.cheat.png

 

Vous n’avez pas besoin de beaucoup plus pour commencer à utiliser Regex et, comme c’est généralement le cas avec Alteryx, vous découvrirez qu’il existe de nombreuses façons de créer une expression correspondant à un modèle. Donc, ne vous inquiétez pas trop des détails et n’ayez pas peur de passer du temps à apprendre avec la bonne vieille méthode de « supposer et vérifier ».
trial and error.jpg

Ne vous inquiétez pas, je suis classiquement entraîné.

 

 

Pour obtenir des guides plus complets sur Regex, vous pouvez également consulter le Guide Syntax Format Boost-Extended, ainsi que le Guide de syntaxe Perl Regex.

 

Alteryx a structuré les fonctionnalités Regex en quatre méthodes : Correspondre, Analyser, Remplacer et Marquer avec un jeton. Notre documentation d'aide pour ces méthodes est très bonne aussi.

 

Correspondre

 

La méthode Correspondre vérifie simplement si une chaîne peut être décrite par l'expression régulière fournie et génère une valeur vraie (True) ou fausse (False).Nous utiliserons les éléments d’expression de la table ci-dessus pour faire correspondre nos adresses. Vous pouvez créer une longue expression en les rassemblant et en incluant des espace \s et des virgules , où qu’ils apparaissent.

 

 

regex1.PNG

 

 

Les deux premières adresses correspondent très bien à l'aide de cette expression, mais la troisième adresse s'égare de ce que nous nous attendions à voir et échoue. En raison d'une règle obscure sur les bâtiments qui partagent un nom avec leur adresse, le numéro de rue est orthographié et notre expression régulière est incapable de le faire correspondre.

 

La clé pour écrire un bon Regex est de prévoir ces exceptions dans vos données et de les prendre en compte dans l’expression. Afin de faire correspondre  « Two » dans cette adresse, nous allons mettre une autre expression pour vérifier si et seulement si celui-ci ne parvient pas à correspondre. La plupart des adresses commencent par des caractères numériques, mais si elles ne commencent pas, cette expression cherchera un mot. Regardez à quoi ça ressemble :

 

(?:^\d+)|(?:^\w+)

 

C'est beaucoup plus simple qu'il n'y paraît,et en fait, seuls deux symboles de Regex supplémentaires sont utilisés. Le symbole de la pipe signifie « ou ». Par exemple, a|b vérifierait seulement si a correspond et si elle ne fonctionne pas, si b correspond. Le deuxième symbole est (?:...), également connu sous le nom de groupe non marquéC’est juste une façon de regrouper ces éléments pour l’opération ou.

 

 

 

regex2.PNG

 

En résumé, le premier groupe ici  (?:^\d+) fait simplement la même chose qu’avant, mais quand il échoue, l'expression tente de faire correspondre le deuxième groupe (?:^\w+). Cela nous permet de faire la correspondance avec une version étendue de notre adresse ci-dessus sans aucun problème.

 

Pour en savoir plus sur match :

 

Crédit supplémentaire : il existe de nombreuses façons de structurer Regex ; commentez ci-dessous avec une meilleure alternative à (?:^\d+)|(?:^\w+). Pourquoi est-elle meilleure?

 

Analyser

 

La méthode Correspondre est agréable parce que vous pouvez l’utiliser pour la validation, mais la méthode Analyser est vraiment quand RegEx prend tout son sens, vous permettant d'extraire des informations utiles à partir d'un bloc de texte. L’outil Regex rend cela facile - tout ce dont nous avons besoin est de mettre des parenthèses (...) autour de chaque chose que nous voulons extraire. Ceux-ci sont appelés groupes marquésla contrepartie de nos groupes non marqués ci-dessus (?:...).

 

regex3.PNG

 

Lorsque vous saisissez les parenthèses, vous les verrez apparaître dans une fenêtre de champ similaire à l’outil Sélectionner, ce qui vous permet de renommer les champs et de modifier les types de données.

 

Pour en savoir plus sur Analyser :

 

 

Remplacer

 

Comme vous pouvez le constater, la méthode Analyser n’est en fait qu’une extension de la méthode Correspondance qui nous permet d’extraire le texte et de le placer dans une nouvelle colonne. Eh bien, qu’arrive-t-il quand nous élargissons ce concept et que nous nous demandons : « Comment puis-je remettre les choses en place? » C'est là que la méthode Remplacer entre en vigueur.

 

Avec Remplacer, nous pouvons analyser des composants de notre chaîne (String), les remplacer, et même les réorganiser. Nous pouvons le faire en spécifiant des groupes marqués pour indiquer à l’outil Regex ce qu'il faut remplacer et où, dans un langage que tout le monde peut comprendre...

 

dollah bills

 

Le paresseux pimpant a tout à fait raison, bien sûr, nous pouvons utiliser des symboles de dollars $ avec des chiffres pour spécifier exactement chaque groupe marqué.  Par exemple, $1, $2 et $3 se réfèrent respectivement aux premiers, deuxième et troisième groupes marqués. Donc, pour notre liste d'adresses,  si nous voulions juste analyser une liste de villes et d’états, nous pourrions entrer l’expression $4, $5.

 

regex4.PNG

 

Notez que nous pouvons ajouter notre propre virgule là, et aussi un espace, en les saisissant simplement dans la zone de texte. La méthode Remplacer est très flexible et vous pouvez également l’utiliser dans l’outil Formule avec la fonction Regex_replace.

 

Pour en savoir plus sur Remplacer :

 

 

Marquer avec un jeton

 

Regex est très efficace lorsque les choses nous sont données dans une belle liste et organisée, mais que se passe-t-il si toutes ces adresses ont été expulsées sans la moindre cérémonie par un appel API ou base de données comme un seul bloc de texte ?

 

3345 Michelson Drive, suite 400, Irvine, ca 92612, 12303 Airport Way, suite 250, Broomfield, co 80021, deux North Riverside Plaza, suite 1430, Chicago, il 60606

 

Ce n’est pas très utile - tout est délimité par une virgule, mais il n’y a pas de moyen facile de savoir quand une adresse se termine et une autre commence. Ce dont nous avons besoin ici c’est la méthode Marquer avec un jeton, qui va prendre ce texte et le diviser en colonnes ou en lignes, de manière très similaire à l’outil Texte en colonnesIl y a deux différences importantes qui définissent le Marquer avec un jeton de RegEx :

 

  1. Au lieu de faire la correspondance avec ce que vous ne voulez pas (comme une virgule), vous faites correspondre à ce que vous voulez (tout le reste).

  2. Vous avez la possibilité de choisir ce qui est divisé et ce qui est ignoré en utilisant un groupe marqué.

Cela peut sembler tumultueux, mais cela donne en fait beaucoup plus de flexibilité sur où/comment vous divisez vos données. Pour illustrer, nous allons diviser notre texte d’adresses en plusieurs lignes, en utilisant la virgule comme délimiteur.

 

 

regex5.PNG

 

Comme nous devons faire correspondre tout ce que nous voulons, nous devons utiliser l’expression  (.+?)(?:,|$). Nous allons l’examiner en partie :

  • .+ signifie un seul caractère . correspond à une ou plusieurs fois +
  • ? est la façon dont nous disons que cette correspondance est paresseuse plutôt qu’ambitieuse. Il s'agit d'une distinction vraiment utile qui peut être un peu difficile à comprendre au début, mais pour les fins de ce cours rapide nous allons juste se concentrer sur ce que le signifie : faire correspondre ce qui est avant zéro fois (pas du tout) ou avant exactement une fois.
  • Le signe plus + est en fait le contraire : c'est un symbole avide, de sorte que le caractère précédent . va essayer de faire correspondre une ou plusieurs fois. Alors qu'est-ce que cela signifie quand on dit à quelque chose avide d'être paresseux ? Eh bien, en fait, cela change à quel point il peut être ambitieux, en le forçant à regarder la prochaine correspondance. Alors, qu’est-ce .+? signifie vraiment est :    « Faites correspondre un caractère une ou plusieurs fois jusqu’à ce que vous puissiez répondre à ce qui suit ».
  • Ce qui suit est un groupe non marqué (?:,|$) qui fonctionne essentiellement comme un signe d'arrêt pour le (.+?précédent. Comme il n'est pas dans le groupe marqué, il ne sera pas présent dans le résultat. Il est seulement dans un groupe non marqué, de sorte que nous vous demandons de chercher soit une virgule , ou la fin de la ligne $ à la fin du texte.

Ouf-c'est certainement beaucoup d’informations. N'hésitez pas à profiter de cette occasion pour s'étirer, aller faire une promenade, ou méditer.

 

 

line noise.gif

 

 

De toute évidence, l'outil Texte en colonnes peut diviser en utilisant une virgule plus facilement que ce qui précède, mais la flexibilité de Marquer avec un jetonapparaît lorsque nous essayons de faire quelque chose d’un peu plus utile. Par exemple, nous pouvons utiliser cette méthode pour diviser ce bloc d’informations d’adresse dans les trois adresses d’origine.

 

regex6.PNG

 

Dans ce cas, nous utilisons simplement notre dernière expression correspondant au code postal  \d{5} pour marquer l’endroit où chaque correspondance se termine. Comme mentionné ci-dessus, nous savons que chaque ligne se terminera soit avec une virgule, ou avec la fin de la ligne, et nous pouvons utiliser ici (?:,|$pour les diviser avec succès. Dans l'exemple ci-dessus, j'ai choisi de présenter la possibilité de ? de faire correspondre zéro ou une fois pour remplacer ce - afin que nous puissions diviser sur une « virgule facultative » après la correspondance avec le groupe marqué.

 

Pour plus d'informations sur Marquer avec un jeton :

 

Crédit supplémentaire : le ,? ne fonctionnera pas dans le cas précédent, en divisant seulement par virgule - (.+?),? au lieu de (.+?)(?:,|$). Pourquoi?

Commentez ci-dessous avec une explication pour la gloire éternelle et le droit de se vanter.

 

regex.png

 

 

Maintenant, vous devriez avoir une compétence de niveau expert avec l'outil Regex ! Si vous pensez à un cas d'utilisation que nous avons oublié, n'hésitez pas à utiliser la section commentaires ci-dessous ! 

 

Vous souhaitez maintenant contribuer au blog de la communauté en partageant vos expériences et en apprenant à utiliser nos nouveaux outils dans votre vie quotidienne, envoyez moi un e-mail à Stephanie.jansen@alteryx.com.

 

Si vous avez des questions, la communauté est là pour y répondre sur le Forum.

 

Restez à l'écoute de nos dernières publications en vous abonnant aux notifications par email sur la Base de Connaissance

 

*Cet article a été écrit par @AlexKo sur la Communauté anglaise. 

Pièces jointes
Étiquettes