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

C# Discussion :

Regex, alias et guillemets


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut Regex, alias et guillemets
    Salut à tous.

    J'aurais besoin d'éclaircissements sur un point particulier des Regex. J'ai plusieurs grosses Regex qui cherchent à la fois des alias et des guillemets.
    Si je n'avais que des alias, j'utiliserais simplement le '@' pour ne pas m'embêter avec les caractères d'échappement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern = @"^(?<groupName>[\w,=]*)$";
    A l'inverse, si je n'avais que des guillemets, je prendrais la peine de placer un '\' d'échappement avant ces dernières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern = "^(?<groupName>\"searchedWord\")$";
    Étant donné que je mixe les deux, je ne sais pas trop quoi faire :

    • Je ne peux pas utiliser les '@', car je ne pourrai pas échapper les guillemets
    • Je ne suis pas favorable au doublement des '\' sur tous les alias , car, à mes yeux, cela nuirait gravement à la lisibilité et la maintenabilité du code (je dis ça car ma Regex approche les 500 caractères ...) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      string pattern = "^(?<groupName>\"[\\w,=]*\")$";

    La seule idée que j'ai eue jusqu'à présent, mais elle me déplaît, c'est de placer mes Regex dans des fichiers textes inclus dans des resource afin de plus avoir ce problème...

    Si quelqu'un a une bonne idée ou une astuce pour trouver une bonne méthode, je suis preneur !

    Merci beaucoup

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Je ne suis peut être pas tout à fait réveillé, mais comme ça j'ai rien compris

    Tu pourrais montrer un exemple (ou plusieurs s'il y a des cas à la con ^^) de texte en entrée et de ce que tu veux récupérer avec l'expression régulière ?

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Je ne suis peut être pas tout à fait réveillé, mais comme ça j'ai rien compris
    Oups, et c'est le roi des Regex qui le dit

    Alors en entrée, j'ai des trucs du genre (ce sont des lignes de logs LDAP dont j'ai viré le début pour l'exemple) :
    SRCH base="cn=myCn,ou=myOu,o=myO" scope=0 filter="(objectClass=*)" attrs="objectClass"
    J'ai donc ma Regex que je pense être obligé d'écrire de la façon suivante, car ma chaîne contiendra obligatoirement des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern = "^(?<operationType>SRCH)\\sbase=\"(?<searchBase>[\\w,=]*)\"\\sscope=(?<searchScope>0|1|2)\\sfilter=\"(?<searchFilter>[\\w\\(\\)\\*=]*)\"\\sattrs=\"?(?<searchAttributes>ALL|[\\w\\s]+)\"?$";
    Ce que je cherche, c'est une solution me permettant d'éviter de doubler les '\', comme dans "\\s", et d'échapper les '"', comme dans "\"" (ce que je disais plu haut c'est que le @ me permet d'éviter les "\\s" mais pas les "\"")...

    Voilà, en espérant avoir été un peu plus clair dans mes explications

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Ah ok, le problème ce n'est pas du tout l'expression, mais plutôt l'obligation de devoir échapper les caractères, ce qui rend l'expression moins compréhensible donc.

    Si c'est ça, avec une string Verbatim (une chaîne de la forme @"...") pour échapper les guillemets il faut les doubler. Tu éviteras les \\, mais tu devras donc avoir des "" pour chaque guillemet dans l'expression.

  5. #5
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Si c'est ça, avec une string Verbatim (une chaîne de la forme @"...") pour échapper les guillemets il faut les doubler. Tu éviteras les \\, mais tu devras donc avoir des "" pour chaque guillemet dans l'expression.
    Merci beaucoup StormimOn, c'est exactement ce que je cherchais J'ai beau utiliser régulièrement les '@' (je ne savais pas que ça s'appelait les string verbatim d'ailleurs ), je ne connaissais pas le coup des double quotes.

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

Discussions similaires

  1. [RegEx] Regex avec guillemets ET apostrophes
    Par elcoyotos dans le forum Langage
    Réponses: 3
    Dernier message: 16/12/2011, 18h22
  2. Regex : récuperer une chaine entre deux guillemets anglais(")
    Par Phonatacid dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 01/06/2011, 11h02
  3. regex CSV avec des guillemets
    Par thierryler dans le forum Général Java
    Réponses: 48
    Dernier message: 23/04/2011, 11h07
  4. [RegEx] Regex pour detecter les virgules non entre guillemets
    Par calitom dans le forum Langage
    Réponses: 8
    Dernier message: 06/09/2010, 14h38
  5. Réponses: 29
    Dernier message: 09/08/2007, 15h39

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