IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

R Discussion :

Extraire une sous chaine d'une autre chaine de caractere


Sujet :

R

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut Extraire une sous chaine d'une autre chaine de caractere
    Bonjour

    Je souhaite créer une fonction Get-Séquence qui prend en paramètres une liste de chaines de caractères, et un mot, et qui doit retourner une liste de chaines de caractères composée des mots apparaissant après la première occurrence du mot dans la chaine de caractères.

    Par exemple, je passe en parametres à la fonction : "bonjour les amis du monde"
    mot : "amis"
    La fonction doit retourner : "du monde"

    Y a-t-il une facon de faire ?

    Merci.
    Le jour est le père du labeur et la nuit est la mère des pensées.

  2. #2
    Membre actif
    Homme Profil pro
    Bioinformaticien
    Inscrit en
    Octobre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Bioinformaticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 126
    Points : 296
    Points
    296
    Par défaut
    Bonjour,
    Oui, il y a plusieurs façons de faire. L'idée générale est de travailler avec les expressions rationnelles (regex), dites de longueurs fixes dans le cas d'espèce. À noter que les traitements à faire varient suivant que la regex est répétée ou non dans le texte où on la recherche. Je vous propose deux façons de s'y prendre, d'abord seulement avec des fonctions de base, ensuite avec un paquet contribué à R.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    xxx <- "bonjour les amis du monde"
    yyy <- "bonjour les amis du monde et amis de l'univers"
     
    # Dans la suite, seule la variable yyy est utilisée ; de votre part, essayer avec xxx pour voir ce que ça donne
    zzz <- nchar(yyy)
     
    positions <- regexpr("amis", yyy, fixed = TRUE)
    longueurs <- attributes(positions)
    substring(yyy, positions + longueurs$match.length, zzz)
     
    positions <- gregexpr("amis", yyy, fixed = TRUE)
    longueurs <- attributes(positions[[1]])
    lapply(positions[[1]] + longueurs$match.length, function(x) substring(yyy, x, zzz))
     
    # Avec stringr
    library("stringr")
    positions <- str_locate(yyy, "amis")
    substring(yyy, positions[1, 2] + 1, zzz)
     
    positions <- str_locate_all(yyy, "amis")
    lapply(positions[[1]][, 2], function(x) substring(yyy, x + 1, zzz))
     
    # Pour aller plus loin dans la manipulation
    ### 1) des chaînes de caractères, voir
    help(package = "stringi") # À ne pas confondre avec stringr
    ### 2) des regex, voir
    help("regex", package = "base")
    Le tutoriel perlretut d'introduction aux regex pourrait être un bon point d'entrée. Il concerne Perl, un langage ayant des outils très puissants pour ce genre de traitements. D'ailleurs, la plupart des outils de regex de R propose des interfaces compatibles avec la syntaxe de Perl. Vous pouvez le consulter

    Dans le tutoriel, la notion qui s'applique à votre cas est dite lookbehind.

Discussions similaires

  1. [Débutant] Extraire une sous matrice d'une autre
    Par linda05 dans le forum MATLAB
    Réponses: 11
    Dernier message: 04/04/2014, 14h56
  2. [RegEx] Remplacement de chaine dans une sous chaine
    Par fpouget dans le forum Langage
    Réponses: 4
    Dernier message: 23/02/2010, 08h49
  3. REGEXP : recupérer une chaine entre deux autres chaines
    Par dude666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2006, 09h23
  4. recherche d'une chaine dans une sous chaine
    Par claralavraie dans le forum Oracle
    Réponses: 1
    Dernier message: 31/07/2006, 12h00
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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