Text mining : utilisation des métacaractères

Bonjour,

  1. Dans les deux codes suivants, quelle est la différence entre - et - ? S’agit-il d’un métacaractère ?

r = re.compile(r"http(s)?://[a-zA-z0-9\.\-/]+")

r = re.compile(r">([a-zA-Z0-9.-]+@[a-zA-Z.-]+)<")

  1. Et à quoi correspondent les symboles < > ? Est-ce que c’est pour éviter les doublons dans les résultats retournés ? (cf question pour retrouver les emails dans l’extrait du code html d’un lien)

r = re.compile(r"http(s)?://[a-zA-z0-9\.\-/]+")

r = re.compile(r">([a-zA-Z0-9.-]+@[a-zA-Z.-]+)<")

  1. A quoi sert le caractère _ dans [^a-zA-Z0-9_] ?

Je vous remercie,
Océane

Bonjour Océane,

Dans une expression régulière le tiret - correspond à 2 choses :

  • Entre deux autres caractères au milieu de crochets [], il s’agit d’un métacaractère. a-z signifie ‹ tous les caractères entre a et z (dans le code ASCII), donc ici tous les lettres minuscules ›
  • Après un antislash \ ou en dernière position dans des crochets, il correspond à la présence du caractère tiret - . Il faut bien noter que pour enlever tout ambiguïté, - ne représente le caractère - qu’en position finale dans des crochets.
  • Il en est de même pour l’underscore _ qui représente le caractère underscore _ en fin de crochets.

Les symboles > et < représente respectivement les caractères > et <. Dans l’exemple du cours, c’est en effet parce que les adresses email se trouvent entre 2 balises html que l’on indique > avant le mail (la balise précédente se ferme) et < après le mail (la balise suivante s’ouvre).

J’espère que cela aura répondu à vos questions.
Si c’est le cas, vous pouvez indiquer cette réponse comme utile en cochant le symbole :white_check_mark: sous ce message.

Sinon, n’hésitez pas à demander des informations complémentaires :wink:

Bonjour Théophile,

Merci pour ton retour ! C’est très clair.
J’ai une autre question qui est arrivée avec ta réponse :

Sur le code ci-dessous, le point n’a pas de caractère \ devant lui donc on utilise ici sa fonction (remplacer n’importe quel caractère). Alors pourquoi met-on un - ? Le point n’est pas censé pouvoir le remplacer ?

r = re.compile(r">([a-zA-Z0-9.-]+@[a-zA-Z.-]+)<")

Je te remercie,
Océane

C’est une très bonne question !

A priori le point dans des [ … ] pourrait signifier n’importe quel caractère (sauf le saut de ligne \n) comme c’est le cas en dehors des crochets.

Mais cela serait donc inutile de faire des crochets et on pourrait tout remplacer par une point.

Ainsi, un point entre crochet n’est pas compris comme un métacaractère et n’a pas besoin d’un antislash pour être compris comme un point (même si cela peut porter à confusion et que . sera similaire).

J’espère que cela répond bien à ta question, qui est bienvenue pour d’autres utilisateurs :wink:

Bonne journée :slight_smile:

Juste pour confirmer ce que vous avez bien expliqué Théophile, le point en dehors du crochet en tant que métacaractère représente vraiment n’importe quoi même les espaces à ce que j’ai pu expérimenté?
seul le saut de ligne n’est pas pris en compte absolument rien d’autre?

Merci juste pour la confirmation

Par contre tout métacaractère pert sa fonction lorsqu’il est entre crochet?

Ce n’est pas le cas des raccourcis par contre? Les caractères spéciaux doivent-il aussi être précédés d’un \ entre crochet?

Ca fait pas mal d’élements alors pas évident de tout maitriser dès la première approche…

Merci d’avance

pourtant le métacaractère ^ garde bien son caractère métacaractère en crochet comme le montre l’exemple ci-joint, non?

J’ai juste besoin d’être sûr de bien tout saisir

37AC2CFC-EE7F-462D-83B7-133A3F07A763_4_5005_c

Une question en core qui me vient, comment indiquer le caractère spécial \ en crochet sachant que c’est lui même qui indique la présence des caractères spéciaux \ : ne fonctionne pas

Oui c’est exactement cela.

Alors non, c’est vrai pour le point mais pas pour tous les metacaractères.

Avec un \ on est sûrs que le métacaractère a perdu sa fonction. Je préconise de toujours utiliser \ devant un caractère spécial pour être sûr qu’on l’utilise bien pour représenter un caractère :wink:

Bonjour Théophile,

une dernière question sur le premier cours de text mining. \ précède les caractères spéciaux dans le crochet. Comment doit-on faire si on veut le mettre lui même en caractère spécial? \???

Merci pour votre réponse
F

Il faut « l’antislasher » également.

Cela donne \\.

Attention à l’affichage cependant, dans les réponses l’antislash sera affiché comme un double antislash même si dans la chaîne de caractères il n’y en a qu’un !

Merci beaucoup Théophile

Bonjour,
dans r = re.compile(re"http(s)?://[a-zA-Z0-9.-/]+")
Désolée , je ne comprends pas à quoi sert le « ? » de re"http(s)?: (ce point ci pas encore comprit) !)

et pourquoi en fin de [], le « - » est précédé de l’antislach \ => ah ben si :grinning:, du coup en écrivant ma question je comprends pourquoi !
(car « - » est un métacaractère et il faut le précéder d’un \ pour lui ôter , quand il est dans [] son pouvoir de métacaratère ? c’est bien ça ?)

Merci de votre aide, Anne

Bonjour @AnneSCHNEIDER ,

Pour le tiret - c’est bien ça :wink:

Le point d’interrogation ? est un métacaractère indiquant que l’expression précédente doit être présente exactement 0 ou 1 fois.
Ici, cela indique que cette regex repèrera les liens http://etc et les liens https:// :wink:

J’espère que cela est clair pour toi,

Bonne journée :slight_smile:

1 Like

Merci Theophile, c’est maintenant très clair !