Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre actif
    Inscrit en
    novembre 2003
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 459
    Points : 204
    Points
    204
    Par défaut Remplacements multiples dans une expression régulière
    Bonjour,
    J'ai un vecteur V qui contient des "Oui" ou des "Non" (ou rien)

    Je voudrais remplacer les Oui par O et les non par N.

    J'ai pensé faire quelque chose comme ça, avec un double appel à gsub() : gsub("Oui","O",gsub("Non","N",c("Oui","Non","Non","Oui","","Non","","","Oui",""))).

    Mais il me semble avoir vu quelque part qu'il était possible de conditionner gsub pour qu'elle remplace par un certain mot si elle rencontre le 1er pattern, et par un second mot si elle rencontre le 2ème pattern.

    On aurait quelque chose comme gsub("(Oui)|(Non)","(O)|(N)",V).
    Mais cette écriture ne donne pas ce que je veux (le même résultat que précédemment).

    Est-ce que quelqu'un aurait une petite idée sur la façon de procéder ?

  2. #2
    Membre confirmé
    Inscrit en
    février 2011
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : février 2011
    Messages : 262
    Points : 539
    Points
    539
    Par défaut
    Bonjour,

    je ne serai pas le faire directement avec gsub en appliquant différent pattern de remplacement. Tu as plusieurs possibilités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # en deux fois
    x <- c("Oui","Non","Non","Oui","","Non","","","Oui","")
    gsub("Non", "N", gsub("Oui", "O", x))
     
    # en supprimant on ou ui :
    gsub("(on|ui)", "", x)
     
    # en supprimant les lettres minuscules
    gsub("[a-z]", "", x)
     
    # en établissant des correspondances entres N et Non, Oui et O, etc.
    c("N", "O", "")[match(x, c("Non", "Oui", ""))]
     
    # ou encore (attention à l'ordre alphabétique)
    c("", "N", "O")[factor(x)]
    cdlt

  3. #3
    Membre actif
    Inscrit en
    novembre 2003
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 459
    Points : 204
    Points
    204
    Par défaut
    Super !

    Je vais conserver tes solutions avec les fonctions match() ou factor(), qui permettent de faire ce que je voulais sur d'autres types de réponses que Oui/Non.

    Merci Totocode,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une date butoire dans une expression régulière
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2008, 11h11
  2. Réponses: 5
    Dernier message: 31/08/2006, 14h34
  3. Parenthèses dans une expression régulière
    Par papyreno dans le forum java.util
    Réponses: 3
    Dernier message: 10/05/2006, 17h28
  4. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 19h17
  5. Réponses: 6
    Dernier message: 17/08/2005, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo