un problème d'expression régulière

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

un problème d'expression régulière

Messagepar Stéphane Laurent » 13 Mar 2018, 06:43

Bonjour,

J'ai une châine de caractères de ce style:

Code : Tout sélectionner

x = "3037//1922 3038//1921 3039//1924"


Je voudrais retirer les slashs ainsi que les nombres qui suivent les slashs. Ainsi pour l'exemple précédent cela donnerait:

Code : Tout sélectionner

"3037 3038 3039"


Idéalement il me faudrait même le vecteur numérique

Code : Tout sélectionner

c(3037, 3038, 3039)


Une idée ? Merci pour votre attention.

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: un problème d'expression régulière

Messagepar Stéphane Laurent » 13 Mar 2018, 06:55

Ah si je démarre comme ça je sais m'en sortir avec strsplit:

Code : Tout sélectionner

> x <- c("3037//1922", "3038//1923")
> strsplit(x, "//")
[[1]]
[1] "3037" "1922"

[[2]]
[1] "3038" "1923"


Je vais voir si je m'en sors comme ça, mais la question de départ m'intéresse encore.

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: un problème d'expression régulière

Messagepar Stéphane Laurent » 13 Mar 2018, 07:34

Ouaip, jai réussi avec strsplit. Voici le code qui permet de lire un fichier OBJ, si ça intéresse quelqu'un:

Code : Tout sélectionner

obj <- readLines("myobj.obj")

verticesIdxs <- grep("v ", obj)
cvertices <- strsplit(obj[verticesIdxs], " ", fixed=TRUE)
vertices <- apply(do.call(rbind, cvertices)[,-1], 2, as.numeric)


facesIdxs <- grep("f ", obj)
cfaces <- strsplit(obj[facesIdxs], " ", fixed=TRUE)
cfaces2 <- lapply(cfaces, `[`, -1)
cfaces3 <- lapply(cfaces2, function(x) strsplit(x, "//", fixed=TRUE))
faces <- lapply(cfaces3, function(x) as.numeric(unlist(lapply(x, `[`, 1))))

facesCoordinates <- function(i){
  vertices[faces[[i]],]
}

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: un problème d'expression régulière

Messagepar Michaël Delorme » 13 Mar 2018, 10:54

Code : Tout sélectionner

x <- "3037//1922 3038//1921 3039//1924"
unlist(strsplit(gsub("//\\d{4}", "", x), " "))

[1] "3037" "3038" "3039"

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: un problème d'expression régulière

Messagepar François Bonnot » 14 Mar 2018, 08:50

Code : Tout sélectionner

gsub("//[[:digit:]]+","",x)
François

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: un problème d'expression régulière

Messagepar Stéphane Laurent » 14 Mar 2018, 19:43

Parfait, merci à vous.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité