Les expressions régulières (ou Regex en Python ) sont un outil puissant pour rechercher, manipuler et extraire des motifs dans des chaînes de caractères. Elles sont souvent utilisées pour des tâches telles que la validation de données, la recherche avancée et la transformation de texte.
En Python, vous pouvez utiliser le module re
pour travailler avec des regex. Dans le cadre de pandas
, les regex sont souvent utilisées avec des méthodes comme str.contains()
, str.replace()
, str.extract()
pour manipuler des chaînes dans des colonnes de DataFrames.
Voici un guide pour utiliser des regex en Python et avec pandas
.
re
Le module re
de Python permet de travailler directement avec des expressions régulières. Voici les méthodes les plus couramment utilisées :
re.search()
: Cherche le premier motif correspondant dans une chaîne.re.findall()
: Trouve toutes les correspondances dans une chaîne.re.sub()
: Remplace les motifs trouvés par une autre chaîne.re.match()
: Vérifie si le motif correspond au début de la chaîne.re.search()
:import re
# Rechercher un mot dans une chaîne
motif = r'chat'
texte = "Il y a un chat dans la maison."
resultat = re.search(motif, texte)
if resultat:
print("Mot trouvé !")
else:
print("Mot non trouvé.")
re.sub()
pour remplacer un motif :# Remplacer tous les chiffres par un symbole '#'
texte = "Mon numéro est 12345."
nouveau_texte = re.sub(r'\d', '#', texte)
print(nouveau_texte)
Mon numéro est #####.
Voici quelques motifs courants dans les regex :
.
: Représente n’importe quel caractère sauf un saut de ligne.^
: Représente le début de la chaîne.$
: Représente la fin de la chaîne.\d
: Représente n’importe quel chiffre (0 à 9).\w
: Représente n’importe quelle lettre ou chiffre (a-z, A-Z, 0-9, _).\s
: Représente un espace blanc (espace, tabulation, saut de ligne).+
: Représente une ou plusieurs occurrences du motif précédent.*
: Représente zéro ou plusieurs occurrences du motif précédent.[]
: Représente un ensemble de caractères. Par exemple, [aeiou]
cherche n’importe quelle voyelle.|
: Représente un ou logique. Par exemple, chien|chat
cherche “chien” ou “chat”.()
: Capture une sous-chaîne.pandas
str.contains()
: Chercher un motif dans une colonneLa méthode str.contains()
permet de chercher des motifs dans une colonne d’un DataFrame.
import pandas as pd
# Créer un DataFrame
data = {
'Commentaire': ['J’adore la télévision', 'Mon téléphone est nouveau', 'Tablette de qualité']
}
df = pd.DataFrame(data)
# Chercher les mots commençant par "télé"
resultat = df[df['Commentaire'].str.contains(r'\btélé\w+', regex=True)]
print(resultat)
Commentaire
0 J’adore la télévision
1 Mon téléphone est nouveau
str.replace()
: Remplacer un motif par une chaîne de caractèresLa méthode str.replace()
permet de remplacer des motifs trouvés dans une chaîne par un autre texte.
df = pd.DataFrame({
'Texte': ['J’ai 10 pommes', 'Il a 15 livres', 'Aucun nombre ici']
})
# Remplacer les nombres par "Nombre"
df['Texte'] = df['Texte'].str.replace(r'\d+', 'Nombre', regex=True)
print(df)
Texte
0 J’ai Nombre pommes
1 Il a Nombre livres
2 Aucun nombre ici
str.extract()
: Extraire des motifsstr.extract()
permet d’extraire des motifs spécifiques d’une chaîne de caractères et de les placer dans une nouvelle colonne.
# Créer un DataFrame avec des textes contenant des numéros de téléphone
data = {
'Texte': ['Mon numéro est 123-456-7890', 'Contactez-moi au 987-654-3210', 'Aucun numéro ici']
}
df = pd.DataFrame(data)
# Extraire le numéro de téléphone (forme 123-456-7890)
df['Numero_Telephone'] = df['Texte'].str.extract(r'(\d{3}-\d{3}-\d{4})')
print(df)
Texte Numero_Telephone
0 Mon numéro est 123-456-7890 123-456-7890
1 Contactez-moi au 987-654-3210 987-654-3210
2 Aucun numéro ici NaN
Les groupes dans les regex, définis par des parenthèses ()
, permettent d’extraire plusieurs parties d’une chaîne.
data = {
'Email': ['alice@example.com', 'bob@domain.com', 'charlie@site.org']
}
df = pd.DataFrame(data)
# Extraire le nom d'utilisateur et le domaine de l'email
df[['Utilisateur', 'Domaine']] = df['Email'].str.extract(r'(\w+)@(\w+\.\w+)')
print(df)
Email Utilisateur Domaine
0 alice@example.com alice example.com
1 bob@domain.com bob domain.com
2 charlie@site.org charlie site.org
Vous pouvez aussi remplacer des valeurs à l’aide d’une fonction qui modifie les correspondances trouvées.
# Fonction de mise en majuscule
def majuscule(motif):
return motif.group(0).upper()
# Remplacer les mots commençant par "télé" par leur version en majuscule
df['Commentaire'] = df['Commentaire'].str.replace(r'\btélé\w+', majuscule, regex=True)
print(df)
Commentaire
0 J’adore la TÉLÉvision
1 Mon TÉLÉphone est nouveau
2 Tablette de qualité
Les regex en Python, et plus spécifiquement avec pandas
, offrent une méthode puissante et flexible pour rechercher, remplacer et extraire des motifs complexes dans des chaînes de caractères. Les principales méthodes à utiliser sont :
str.contains()
: Chercher un motif dans une colonne.str.replace()
: Remplacer des motifs par une autre chaîne.str.extract()
: Extraire des motifs spécifiques.re.search()
et re.sub()
pour une utilisation plus générique en Python.Les regex sont particulièrement utiles pour manipuler des données textuelles, extraire des informations structurées ou nettoyer des ensembles de données dans des DataFrames pandas
.
Lorsque vous utilisez des expressions régulières (regex) pour rechercher un mot qui contient des caractères spéciaux, il est important de savoir que certains de ces caractères ont une signification particulière dans les expressions régulières (comme .
, *
, +
, ?
, ^
, $
, (
, )
, [
, ]
, {
, }
, |
, \
, etc.). Pour rechercher un mot contenant ces caractères, vous devez les échapper en ajoutant un antislash (\
) devant le caractère spécial ou utiliser une méthode comme re.escape()
qui échappera automatiquement tous les caractères spéciaux.
Si vous connaissez les caractères spéciaux dans votre chaîne, vous pouvez les échapper en les précédant d’un antislash (\
).
Dans cet exemple, les points (.
) sont des caractères spéciaux en regex, car ils représentent n’importe quel caractère. Pour rechercher une adresse IP, il faut échapper les points (\.
).
import re
# Texte contenant une adresse IP
texte = "L'adresse IP du serveur est 192.168.1.1."
# Rechercher l'adresse IP avec des caractères spéciaux (les points doivent être échappés)
motif = r'192\.168\.1\.1'
# Recherche dans le texte
resultat = re.search(motif, texte)
if resultat:
print("Adresse IP trouvée :", resultat.group())
else:
print("Adresse IP non trouvée.")
Adresse IP trouvée : 192.168.1.1
re.escape()
pour échapper automatiquement les caractères spéciauxLa méthode re.escape()
permet d’échapper automatiquement tous les caractères spéciaux dans une chaîne. C’est très pratique si vous ne savez pas à l’avance quels caractères peuvent être spéciaux dans votre texte.
re.escape()
pour rechercher une chaîne avec des caractères spéciauximport re
# Texte contenant des caractères spéciaux
texte = "Cherchons ce chemin de fichier : C:\\Utilisateurs\\Nom\\Documents\\fichier.txt"
# Utiliser re.escape() pour échapper tous les caractères spéciaux
motif = re.escape('C:\\Utilisateurs\\Nom\\Documents\\fichier.txt')
# Rechercher le chemin de fichier dans le texte
resultat = re.search(motif, texte)
if resultat:
print("Chemin trouvé :", resultat.group())
else:
print("Chemin non trouvé.")
Chemin trouvé : C:\Utilisateurs\Nom\Documents\fichier.txt
str.contains()
dans pandas avec des caractères spéciauxSi vous travaillez avec des DataFrames dans pandas, vous pouvez utiliser la méthode str.contains()
pour rechercher des motifs dans une colonne. Les caractères spéciaux doivent également être échappés dans les regex.
import pandas as pd
# Créer un DataFrame avec des adresses IP
data = {
'Adresse_IP': ['192.168.1.1', '10.0.0.1', '127.0.0.1', '192.168.0.1']
}
df = pd.DataFrame(data)
# Rechercher les adresses IP commençant par "192."
resultat = df[df['Adresse_IP'].str.contains(r'192\.168\.1\.1', regex=True)]
print(resultat)
Adresse_IP
0 192.168.1.1
Supposons que vous vouliez rechercher une chaîne contenant plusieurs caractères spéciaux comme : C:\Utilisateurs\Nom\Documents\fichier.txt
dans un texte plus long.
import re
# Texte contenant des chemins de fichiers
texte = "Voici un chemin de fichier : C:\\Utilisateurs\\Nom\\Documents\\fichier.txt et un autre chemin."
# Utiliser re.escape() pour échapper les caractères spéciaux
chemin_a_chercher = re.escape("C:\\Utilisateurs\\Nom\\Documents\\fichier.txt")
# Rechercher le chemin dans le texte
resultat = re.search(chemin_a_chercher, texte)
if resultat:
print("Chemin trouvé :", resultat.group())
else:
print("Chemin non trouvé.")
Chemin trouvé : C:\Utilisateurs\Nom\Documents\fichier.txt
Les parenthèses sont des caractères spéciaux en regex, donc vous devez les échapper.
# Rechercher "Nom de fichier (final)"
texte = "Voici le Nom de fichier (final)."
motif = re.escape("Nom de fichier (final)")
resultat = re.search(motif, texte)
print(resultat.group()) # Affiche "Nom de fichier (final)"
Les accolades {}
sont aussi des caractères spéciaux qui doivent être échappés.
# Rechercher "Valeur {exemple}"
texte = "Voici la Valeur {exemple}."
motif = re.escape("Valeur {exemple}")
resultat = re.search(motif, texte)
print(resultat.group()) # Affiche "Valeur {exemple}"
.
, *
, +
, ?
, ^
, $
, (
, )
, [
, ]
, {
, }
, |
, et \
ont une signification particulière et doivent être échappés avec \
si vous voulez les rechercher tels quels.re.escape()
est une méthode pratique pour échapper automatiquement tous les caractères spéciaux dans une chaîne.str.contains()
et str.replace()
de pandas
acceptent des regex et permettent de chercher ou remplacer des motifs avec des caractères spéciaux dans les colonnes de DataFrames.Ces techniques vous permettent de gérer efficacement les recherches en texte contenant des caractères spéciaux dans vos projets Python.
Les expressions régulières (regex) sont très utiles pour valider et manipuler des adresses e-mail dans des chaînes de caractères. En Python, avec le module re
ou des méthodes de pandas comme str.contains()
ou str.extract()
, vous pouvez utiliser des regex pour identifier, extraire ou valider des adresses e-mail dans des textes ou colonnes de DataFrame.
Voici un guide pour utiliser des regex pour les e-mails.
Une adresse e-mail a généralement la structure suivante :
nom_utilisateur@domaine.ext
nom_utilisateur
: peut contenir des lettres, chiffres, points, tirets, et underscores.domaine
: composé de lettres, chiffres, tirets, et points.ext
(extension) : des lettres uniquement (comme .com
, .fr
, .org
).Voici une expression régulière simple pour capturer des adresses e-mail valides :
[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
[a-zA-Z0-9_.+-]+
: Capture le nom d’utilisateur, qui peut contenir des lettres, chiffres, points, underscores (_
), tirets (-
) et le symbole plus (+
).@
: Symbole obligatoire entre le nom d’utilisateur et le domaine.[a-zA-Z0-9-]+
: Capture le nom de domaine, composé de lettres, chiffres et tirets.\.
: Capture le point séparant le domaine de l’extension.[a-zA-Z0-9-.]+
: Capture l’extension du domaine, qui peut être composée de lettres, chiffres, tirets, et points (comme .com
, .fr
).re.search()
import re
# Regex pour valider une adresse e-mail
motif_email = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
# Exemple d'une chaîne contenant une adresse e-mail
texte = "Mon e-mail est alice@example.com, n'hésitez pas à me contacter."
# Rechercher une adresse e-mail
resultat = re.search(motif_email, texte)
if resultat:
print("Adresse e-mail trouvée :", resultat.group())
else:
print("Aucune adresse e-mail trouvée.")
Adresse e-mail trouvée : alice@example.com
re.findall()
Si vous souhaitez extraire toutes les adresses e-mail présentes dans un texte, utilisez re.findall()
.
# Exemple d'une chaîne avec plusieurs adresses e-mail
texte = "Contactez alice@example.com ou bob@domain.org pour plus d'informations."
# Extraire toutes les adresses e-mail
emails = re.findall(motif_email, texte)
print("Adresses e-mail trouvées :", emails)
Adresses e-mail trouvées : ['alice@example.com', 'bob@domain.org']
Si vous avez un DataFrame contenant des adresses e-mail dans une colonne, vous pouvez utiliser str.contains()
pour rechercher les e-mails et str.extract()
pour les extraire.
str.contains()
import pandas as pd
# Créer un DataFrame avec une colonne contenant des chaînes de caractères
data = {
'Texte': ['Voici mon e-mail alice@example.com',
'Bob est à bob@domain.org',
'Pas d\'e-mail ici',
'Contactez-nous à support@service.com']
}
df = pd.DataFrame(data)
# Rechercher les lignes contenant une adresse e-mail
emails_present = df[df['Texte'].str.contains(motif_email, regex=True)]
print(emails_present)
Texte
0 Voici mon e-mail alice@example.com
1 Bob est à bob@domain.org
3 Contactez-nous à support@service.com
str.extract()
# Extraire les adresses e-mail présentes dans la colonne 'Texte'
df['Email'] = df['Texte'].str.extract(r'([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)', expand=False)
print(df)
Texte Email
0 Voici mon e-mail alice@example.com alice@example.com
1 Bob est à bob@domain.org bob@domain.org
2 Pas d'e-mail ici NaN
3 Contactez-nous à support@service.com support@service.com
Une regex plus stricte pour les adresses e-mail peut inclure des limitations sur la longueur ou des caractères spécifiques dans les parties du nom d’utilisateur ou du domaine.
Exemple pour limiter l’extension à 2-6 caractères :
[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}
Cette version limite l’extension du domaine à 2 à 6 lettres, ce qui est typique pour des domaines comme .com
, .org
, .fr
, mais exclut les domaines à extension plus longue comme .photography
.
Vous pouvez anonymiser ou masquer des adresses e-mail dans un texte à l’aide de re.sub()
.
# Remplacer les adresses e-mail par "[email masqué]"
texte = "Mon adresse e-mail est alice@example.com"
texte_modifie = re.sub(motif_email, "[email masqué]", texte)
print(texte_modifie)
Mon adresse e-mail est [email masqué]
Vous pouvez utiliser des regex dans des validations plus complexes. Par exemple, pour vérifier si un e-mail est bien formaté avant de l’accepter dans une application :
def valider_email(email):
motif_email = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}'
if re.fullmatch(motif_email, email):
return True
else:
return False
# Exemple de validation
email_test = "alice@example.com"
if valider_email(email_test):
print(f"L'adresse '{email_test}' est valide.")
else:
print(f"L'adresse '{email_test}' n'est pas valide.")
L'adresse 'alice@example.com' est valide.
Les expressions régulières offrent une méthode flexible et puissante pour travailler avec des adresses e-mail dans Python. Voici les méthodes clés à retenir :
re.search()
: Pour trouver la première occurrence d’une adresse e-mail dans un texte.re.findall()
: Pour extraire toutes les adresses e-mail présentes dans une chaîne.re.sub()
: Pour remplacer ou anonymiser des adresses e-mail dans un texte.str.contains()
et str.extract()
dans pandas : Pour rechercher ou extraire des e-mails dans des colonnes de DataFrame.Ces techniques permettent de manipuler des adresses e-mail efficacement dans des projets impliquant des ensembles de données ou des validations textuelles.
Le commentaire composé est un exercice littéraire qui consiste à analyser un texte en respectant…
Les adjectifs liés en français sont les adjectifs qui s’accordent en genre (masculin/féminin) et en…
Voici une liste étendue de mots piégeux en français, avec leurs genres et des explications…
Apprendre à distinguer le genre des noms en français peut être un véritable défi pour…
1. Informations Générales Nom complet : Charles-Louis de Secondat, Baron de La Brède et de…
Introduction L’Art de la Guerre (Dell’arte della guerra), publié en 1521, est l’un des ouvrages…
This website uses cookies.