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

Framework .NET Discussion :

Expressions régulières : ne contient pas un mot


Sujet :

Framework .NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Expressions régulières : ne contient pas un mot
    Bonjour,

    Je suis en train de me casser les dents sur des expressions régulières et notamment pour matcher le fait que la chaine à tester se termine par \r\n.\r\n.
    l'idée est de matcher quelque chose comme :
    ^(tout sauf \r\n.\r\n)*\r\n\.\r\n$
    Le problème est que je ne sais pas écrire (tout sauf \r\n.\r\n).
    J'ai essayé ([^(\r\n\.\r\n)]), ([^(\r\n.\r\n)]), ([^<\r\n\.\r\n>]).
    Rien ne fait.

    Quelqu'un aurait-il une idée ?

    merci

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    \r\n ? et pourquoi dans ce cas ne pas découper tes valeurs par lignes avec soit un ReadLine si tu prends tes données à partir d'un fichier texte (via un objet StreamReader) ou un String.Split.
    cf.
    Ce code
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    var s = "ab\nc\r\nde\nf".Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
    Renvoi le tableau composé de ab,c,de,f ... c'est pas ce que tu veux ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci de ta réponse.
    Je veux le faire avec une expression régulière... tout simplement pour la beauté du geste !
    mais effectivement lire ligne par ligne est une solution !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Et maintenant que j'ai pas mal cherché, j'aimerais juste savoir si c'est possible (j'imagine que oui étant donnée la puissance des regex)... et comment.

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Je trouve pas beau une solution qui pousse à faire des choses bizarres alors qu'un outil a déjà été dédié pour ça

    M'enfin bon, avec les RegEx ça ferait un truc genre ça :
    A la troisième tentative, ça semble marcher

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    En fait, j'ai mal exprimé mon besoin : le but est d'interpréter des messages électroniques récupérés par le protocole pop3 à l'aide des regex.
    Et d'après la rfc, il est indiqué qu'un message se termine par la séquence CRLF.CRLF
    avant cette séquence, tous les caractères sont acceptés, y compris CR, LF et .
    Il m'est en effet possible de parcourir le contenu textuel afin de trouver ce patern et donc de déduire sa validité en tant que message électronique.
    Mais il me semble que les regex peuvent s'avérer plus performantes car le contenu peut être long, notamment si le message est accompagné de pièces jointes.
    Par ailleurs, je ne comprends pas bien comment (\w| )+ peut résoudre mon problème car a priori seuls les caractères alphanum seront matchés + espace... mais ma demande initiale n'était certainement pas très claire !
    Dans tous les cas, merci !

  7. #7
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    ...

    Dans ce cas, ceci ?
    ça match comme fin du message \r\n\r\n ou \n\r\n, ça reste cohérent ... à la limite si ça match \n\r\n mais que le caractère précédent n'était pas un \r, on rajoute la partie matchée à un string et on refait le match sur la partie suivante de la chaine (avec LaChaine.SubString ...)

  8. #8
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Je reprends ce vieux post, toujours dans l'optique d'obtenir les éléments qui ne sont pas présents.
    Voici une liste de mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Txt <- c("argue", "sténo", "huons", "remet", "ponce", "mites", "ligie", "vitre", "fluée", "floué", "ahana", "fonte", "boche", "tinté", "frime", "tente", "cédez", "votif", "ligné", "acéré")
    Je voudrais avoir par exemple les mots qui ne contiennent pas la lettre "i".

    J'ai fait différentes tentatives, mais je n'obtiens rien de probant. Exemples :
    grep("^i",Txt,value=TRUE) ne renvoie rien, car c'est interprêté comme liste des mots qui commencent par "i". Ici il n'y en a pas.
    grep("[^i]",Txt,value=TRUE) renvoie tous les termes, donc même ceux qui contiennent "i".

    Quelqu'un aurait une idée ?

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 121
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 121
    Points : 1 628
    Points
    1 628
    Par défaut
    à l'aide de https://regex101.com/r/luyW7a/1 on peut trouver cette regexp ".*[i+].*"

Discussions similaires

  1. [RegEx] expression régulière qui marche pas et pourtant
    Par bigs3232 dans le forum Langage
    Réponses: 6
    Dernier message: 19/03/2010, 17h29
  2. [RegEx] Expression qui ne contient pas une chaine
    Par coupolites dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2010, 10h07
  3. [RegEx] Expressions régulières ne fonctionnent pas
    Par denisg63 dans le forum Langage
    Réponses: 3
    Dernier message: 28/12/2009, 20h48
  4. Expression régulière simple ou pas ?
    Par dollark1K dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/09/2008, 10h13
  5. Expression régulière ne fonctionne pas
    Par Benzeghiba dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 24/06/2008, 22h01

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