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

Dotnet Discussion :

Regex match selon le premier caractère et la longueur de la chaîne


Sujet :

Dotnet

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut Regex match selon le premier caractère et la longueur de la chaîne
    Salut à tous,

    J'ai du mal à trouver comment formuler correctement mon expression régulière.

    Je détecte à l'aide de regex.matches une collection de mots que je déclare comme il suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static Nature As Regex = New Regex("oiseau|mouton|citrouille|banane")
    Je veux pourvoir détecter en plus des mots qui font 9 caractères et qui commencent par un "v"

    Par exemple si j'ai:
    - voiture
    - volontées
    -visiblement

    J'attends comme seul match "volontées" car il commence par un "v" et fait 9 char de long.

    Merci!

  2. #2
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    J'ai fini par trouver. C'est pas évident le regex :-)

    si quelqu'un connait une meilleure méthode, je suis preneur. Je laisse en non résolu le sujet aujourd'hui au cas où.

    Notez que le mot que je cherche est en début de string, mais qu'elle inclut d'autres mots.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Oui mais non, car si tu veux une reconnaissance d'exactement neuf caractères, tu dois aussi utiliser une ancre de fin de chaîne (et mettre un point de moins): Petite astuce pour la lisibilité: au lieu d'écrire huit points consécutifs, un quantificateur serait le bienvenue: (en plus, le moteur de regex de .NET serait plus performant avec cette notation)

    Un dernière chose, vu qu'il s'agit de lettres tu peux être plus restrictif en écrivant: En effet la classe de caractère unicode \p{L} ne contient que les lettres.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Merci pour la réponse détaillée. Je pensais que le $ était pour la fin de la chaîne qu'on parse, pas celle qui doit être identifiée. Je vais opter pour ta seconde solution, vu que j'ai des caractères spéciaux alphabétiques, _ , ! , ? et chiffres dans la chaîne. Du coup, je ne suis pas sûr qu'une conjonction de classes fasse mieux que le "." en perf (si je me trompe, ça me serait utile de le savoir )

    Quoiqu'il en soit, merci encore d'avoir pris le temps.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Dans ce cas tu peux utiliser [\w!?] à la place de \p{L}, puisque \w contient des chiffres et des lettresDO FA FA SIb LA FA DO FA FA FA ainsi que l'underscore.

    Maintenant si tu es sûr du format tu peux aussi utiliser le point à la place, tu auras peut-être un petit gain de performance. Toutefois, si tu dois utiliser cette regex plusieurs fois, tu peux envisager d'utiliser l'option RegexOptions.Compiled lors de la création de l'instance Regex.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 104
    Points : 69
    Points
    69
    Par défaut
    Je vais utiliser l'option regex.compiled. Dans mon cas, je suis entre 40 000 et 900 000 traitements répartis sur 5 regex. Il semblerait que l'option compiled devienne intéressante dans le cas de regex un peu complexes et de traitements d'environ 500 000 passes. Si le délai d'instanciation est si lourd que ça, je pense le placer sur le splashscreen. L'alternative serait en début de traitement.

    Par ailleurs, je les déclare "statique" (vb) pour éviter de me retaper le délai d'instanciation à chaque fois que j'appelle ma méthode. C'est correct?

    Merci

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

Discussions similaires

  1. [RegEx] Regex sur les 3 premiers caractères d'une chaine
    Par boo64 dans le forum Langage
    Réponses: 6
    Dernier message: 01/02/2011, 09h10
  2. Matché seulement le premier caractère
    Par oliviernouhi dans le forum Langage
    Réponses: 9
    Dernier message: 01/12/2010, 11h25
  3. [RegEx] Regex simple: Verfier premier caractère d'une chaine.
    Par yann123456 dans le forum Langage
    Réponses: 2
    Dernier message: 07/04/2009, 15h50
  4. Selection des x premiers caractères dans un champ précis
    Par Schulman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2005, 09h23
  5. Réponses: 2
    Dernier message: 04/09/2004, 10h53

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