52 votes

Périodes échappées dans les expressions régulières R

Sauf si j'ai raté quelque chose, cette regex semble assez simple :

grepl("Processor\.[0-9]+\..*Processor\.Time", names(web02))

Cependant, il n'aime pas les périodes échappées, \. pour laquelle mon intention est d'être une période littérale :

Error: '\.' is an unrecognized escape in character string starting "Processor\."

Qu'est-ce que je comprends mal dans cette syntaxe regex ?

75voto

mu is too short Points 205090

Mon R-Fu est faible au point d'être inexistant mais je pense savoir ce qui se passe.

La partie du processeur R qui gère les chaînes de caractères doit jeter un coup d'œil à l'intérieur des chaînes pour convertir \n et les séquences d'échappement connexes dans leurs équivalents en caractères. R ne sait pas ce que \. signifie donc qu'il se plaint. Vous voulez faire descendre le point échappé dans le moteur de regex, donc vous devez obtenir un simple \ après le mangueur de cordes. La façon habituelle de faire ce genre de chose est d'échapper à l'échappement :

grepl("Processor\\.[0-9]+\\..*Processor\\.Time", names(web02))

L'intégration d'un langage (expressions régulières) dans un autre langage (R) est généralement un peu compliquée, surtout lorsque les deux langages utilisent la même syntaxe d'échappement.

13voto

Cameron Points 752

Au lieu de

\.

Essayez

\\.

Vous devez d'abord échapper le retour arrière.

6voto

dayne Points 4394

La méthode centrée sur R consiste à utiliser la fonction [::] par exemple :

grepl("[:.:]", ".")
# [1] TRUE
grepl("[:.:]", "a")
# [1] FALSE

Dans les documents ( ?regex ):

Les métacaractères des expressions régulières étendues sont . \ | ( ) [ { ^ $ * + ?, mais notez que leur signification particulière dépend du contexte.

[:punct :] Caractères de ponctuation : ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X