Expressions régulières en R

gsub · sub · grepl · regexpr · gregexpr · regmatches

1. Principe

Une expression régulière (ou regex) est un motif décrivant un ensemble de chaînes de caractères. On l’utilise pour tester, extraire ou remplacer du texte.

2. Les fonctions de R

FonctionRôleExemple
grepl(motif, x)Vecteur de booléens : le motif est-il trouvé ?grepl("[0-9]", c("a1","bc")) → TRUE FALSE
sub(motif, rempl, x)Remplace la première occurrencesub("a","*","banane") → "b*nane"
gsub(motif, rempl, x)Remplace toutes les occurrencesgsub("a","*","banane") → "b*n*ne"
regexpr(motif, x)Position de la première occurrence (à combiner avec regmatches)regmatches(x, regexpr("[0-9]+", x))
gregexpr(motif, x)Positions de toutes les occurrences ; renvoie une listeregmatches(x, gregexpr("[0-9]+", x))
regmatches(x, m)Extrait les sous-chaînes repérées par regexpr / gregexprvoir ci-dessus
x <- c("Le 12/03/2024", "RDV le 5/4", "pas de date")
grepl("[0-9]+", x)                       # TRUE TRUE FALSE
sub("[0-9]+", "N", x)                    # "Le N/03/2024" "RDV le N/4" "pas de date"
gsub("[0-9]+", "N", x)                   # "Le N/N/N" "RDV le N/N" "pas de date"
regmatches(x, regexpr("[0-9]+", x))      # "12" "5"   (les non-correspondances disparaissent)
regmatches(x, gregexpr("[0-9]+", x))     # list("12","03","2024") list("5","4") character(0)

3. Caractères spéciaux

MotifSignificationExemple
.n’importe quel caractèrec.t : « cat », « cot »…
^ / $début / fin de chaîne^a : commence par a ; s$ : finit par s
[abc]un caractère parmi a, b, c[aeiou] : une voyelle
[a-z], [0-9]intervalle[A-Za-z] : une lettre
[^abc]un caractère sauf a, b, c[^0-9] : un non-chiffre
\\d, \\w, \\schiffre, lettre/chiffre/_ , espace\\d\\d : deux chiffres
\\D, \\W, \\Sle contraire des précédents
\\bfrontière de mot\\bchat\\b
[[:alpha:]], [[:digit:]], [[:upper:]], [[:lower:]], [[:space:]], [[:punct:]]classes POSIX (à écrire dans des crochets)[[:punct:]] : ponctuation
|« ou »chat|chien
( )groupe (réutilisable avec \\1, \\2… dans le remplacement)(ab)+

4. Quantificateurs

MotifSignification
*0 fois ou plus
+1 fois ou plus
?0 ou 1 fois (optionnel)
{n}exactement n fois
{n,}au moins n fois
{n,m}entre n et m fois

Les quantificateurs sont « gourmands » : a.*b prend le plus long texte possible. Ajouter ? (ex. .*?, avec perl = TRUE) le rend « paresseux ».

5. Le piège de l’antislash dans R

Dans une chaîne R, l’antislash est déjà un caractère d’échappement. Pour que la regex reçoive \d, on écrit "\\d". Pour un point littéral : "\\.". Pour un antislash littéral : "\\\\".
Regex voulueCe qu’on écrit en R
\d+"\\d+"
\.csv$"\\.csv$"
\bchat\b"\\bchat\\b"

Alternative : dans un crochet, le point est littéral : [.]. Avec fixed = TRUE, le motif est lu comme un texte brut (aucun caractère spécial).

6. Remplacements et groupes

sub("^(\\w+) (\\w+)$", "\\2 \\1", "Marie Curie")          # "Curie Marie"
gsub("([0-9]{2})/([0-9]{2})/([0-9]{4})", "\\3-\\2-\\1", "12/03/2024")  # "2024-03-12"

7. Option perl = TRUE

Elle active les regex de type Perl : anticipations (?=...), (?!...), rétrospectives (?<=...), quantificateurs paresseux. Exemple : mot de passe contenant un chiffre et une majuscule :

grepl("^(?=.*[0-9])(?=.*[A-Z])", mdp, perl = TRUE)

8. Méthode

  1. Repérer ce qu’il faut trouver (lettres ? chiffres ? début/fin ? mot entier ?).
  2. Choisir la classe de caractères et le quantificateur.
  3. Ajouter les ancres (^, $, \\b) si le motif doit couvrir toute la chaîne ou un mot entier.
  4. Tester sur des cas limites (chaîne vide, absence de correspondance).

Question 0Score : 0 / 0Banque : questions