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

MATLAB Discussion :

Expressions régulières (regexp, regexprep)


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Points : 19
    Points
    19
    Par défaut Expressions régulières (regexp, regexprep)
    Bonjour,

    Je ne suis pas encore très à l'aise avec les expressions régulières dans Matlab, et je n'arrive pas à faire la chose suivante, qui paraît pourtant très simple :

    Pour simplifier j'ai une chaîne de caractères str (lue dans un fichier ASCII) contenant des valeurs numériques ainsi que des mots, séparés par des caractères d'espacement, et je voudrai repérer tous les mots qui contiennent au moins un caractère qui n'est PAS '0','1','2','3','4','5','6','7','8','9','.','E','-'. (pour ensuite les remplacer par NaN avec regexprep)

    Bref par exemple, dans la string str suivante
    str = '123 0.123456 1.2E-5 4.5 MOT EC20 1P'

    je voudrais repérer les 3 derniers ...

    Dans les expressions régulières, il y un OR logique (|) mais je n'ai pas l'impression qu'il y ait le NOT logique qui me faudrait ici, car en fait je cherche les motifs suivants :

    NOT \<[0-9E-+.]*\>

    (Ou alors encore mieux, peut-on repérer les expressions régulières qui ont un "sens numérique" ? au final je stocke tout ça dans une matrice avec str2num)

    Merci par avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Quel est le but final de tout ça ?

    Pourquoi ne pas simplement utiliser TEXTREAD ou STRREAD ?

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Je lis des gros fichiers de données en ASCII contenant à la fois des valeurs "numériques" et des "mots", et je voudrais remplacer tout ce qui ne pourrait pas être interprété comme un nombre par un NaN. Au final, str2num me ressort une matrice. Comme Matlab manipule très bien les matrices, tout ceci se fait très vite, alors que l'utilisation des fonctions que tu proposes serait bien plus longue. D'ailleurs strread(str,'%f') ne fonctionne pas avec l'exemple ci-dessus (et dernière raison je manipule en réalité des cells of strings, ce que permet regexp et pas strread)

    regexprep(string,'\<[a-z_\- ]*\>','NaN','ignorecase') fonctionne pas mal mais dès qu'il y a au moins un chiffre dans string (exemple 'ABC2') , le mot n'est pas remplacé.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Citation Envoyé par nofasc95 Voir le message
    D'ailleurs strread(str,'%f') ne fonctionne pas avec l'exemple ci-dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    str = '123 0.123456 1.2E-5 4.5 MOT EC20 1P'
     
    [A,B,C,D] = strread(str,'%d%f%f%f%*s%*s%*s')
    Citation Envoyé par nofasc95 Voir le message
    (et dernière raison je manipule en réalité des cells of strings, ce que permet regexp et pas strread)
    Oui mais dans ce cas, tu utiliserais TEXTREAD directement sur le fichier (pas STRREAD).

    Le problème est de savoir si le format de chaque lignes de ton fichier est le même.
    Est-ce que les chaine de caractères apparaissent toujours au même endroit (entête et commentaire mis à part) ?

    Les expressions régulières sont plutôt réservés au cas où les données ne suivent pas un format fixe. Comme repérer des valeurs numériques dans un texte écrit par quelqu'un...

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Oui tout à fait, et c'est bien le problème, les fichiers ne sont pas dans un format fixe dans le sens ou ils ne contiennent pas toujours le même nombre de "colonnes", et il est impossible de savoir à l'avance s'il contiendra des chaînes de caractères (ni dans quelles colonnes elles se trouveront), d'où l'utilisation de regexprep...

    Finalement mon problème se résume simplement comme suit :

    Est-il possible de repérer dans une chaîne de caractères un mot qui contient au moins un caractère qui n'est pas dans une liste donnée ? C'est vraiment un casse-tête ces expressions régulières!

    J'avais pensé à :
    regexp(str,'\<[^0-9E\-.]+\>','match'), mais à nouveau 'ABC2' ou 20EC' ne sont pas repérés...

    Merci de ton aide en tout cas !

Discussions similaires

  1. Expression régulière (REGEXP) en SQL
    Par yanice dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/01/2009, 17h29
  2. expression régulière regexp
    Par Naktan dans le forum C
    Réponses: 2
    Dernier message: 16/08/2007, 19h16
  3. Réponses: 7
    Dernier message: 27/07/2005, 12h41
  4. [regexp] pbl expression réguliére et menu déroulant
    Par UNi[FR] dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2005, 09h37
  5. [RegExp]expression régulière
    Par illegalsene dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2005, 15h33

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