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

VB.NET Discussion :

Expression régulière prix


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Par défaut Expression régulière prix
    Bonjour à tous,


    J'en appelle à vos lumières!

    J'aimerai réaliser une expression régulière pour la gestion de prix qui me fasse cela :

    150 00 0 => 150000
    150000 € => 150000
    150000 £ => 150000
    150000 $ => 150000
    150000 e => 150000
    150000 E => 150000
    150000 à 200000 => 150000
    150000 a 200000 => 150000
    150000 A 200000 => 150000
    150000 de 200000 => 150000
    150000 DE 200000 => 150000
    150000 - 200000 => 150000
    150.000=>150000
    1.500.000=>1500000
    1,500,000=>1500000
    1.500,000=>1500000
    150,000 =>150000
    150,00=> 150

    En espérant avoir fait le tour des possibilités. Le choix est arbitraire mais m'est imposé...

    D'avance merci de votre aide!

  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 doute qu'une expression régulière puisse être utile pour ça, trop de différences. Ne serait-ce que tes deux derniers exemples, une virgule présente dans les deux et dans un cas on garde les zéros et pas dans l'autre. Je vois mal faire ça avec une expression régulière.

    C'est plus une gestion avec la culture (dans un cas la virgule représente le séparateur des milliers, dans l'autre le séparateur décimal). Il faut donc connaitre la culture associée pour faire le traitement. Mais sûrement pas avec des expressions régulières.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 143
    Par défaut
    Merci pour cette réponse rapide!

    OK pour la culture mais une expression régulière peut être utile dans ces càs là :

    150000 à 200000 => 150000
    150000 a 200000 => 150000
    150000 A 200000 => 150000
    150000 de 200000 => 150000
    150000 DE 200000 => 150000
    150000 - 200000 => 150000
    de 150000 a 200000 => 150000

    non?

  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
    On peut le faire avec, mais on peut le faire sans aussi. Il suffit de trouver le premier chiffre, le premier espace suivant le premier chiffre et de ne garder que cette portion de la chaîne. En jouant donc avec les méthodes String.IndexOfAny, String.IndexOf et String.SubString

    Maintenant si tu veux le faire avec une expression régulière tu peux commencer par ceci, ça te donnera des pistes

  5. #5
    Membre éprouvé Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Par défaut
    C'est possible avec deux expressions regulières et un replace :

    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
     
        string analyse = "150000 à 200000";
     
        // Suppression des espaces
        analyse = analyse.Replace(" ", "");
     
        // Suppression des separateurs des milliers
        Regex millierRegex = new Regex(@"(\.|,)([0-9]{3})");
        analyse = millierRegex.Replace(analyse, @"$2");
     
        // Suppression de tout ce qui suit le premier reel
        Regex reelRegex = new Regex(@"([0-9,\.]*)(.*)");
        analyse = reelRegex.Replace(analyse, @"$1");
     
        string resultat = analyse;

  6. #6
    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
    C'est possible avec une seule expression et sans remplacement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim analyse As String = "de 150000 à 200000"      
    Dim result As String = Regex.Match(analyse, "\d+").Value
    Histoire d'éviter trop de code pour le cas du 3ème message

    Par contre cela ne répondra pas à tous les autres cas (notamment 150,000 => 150000 et 150,00 => 150 que l'on ne peut pas gérer puisque c'est une question de culture et de format des valeurs numériques).

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    ce bout de code devrait répondre à ta question :
    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
            Dim ListString As New List(Of String)
     
            ListString.Add("150 00 0")
            ListString.Add("150000 €")
            ListString.Add("150000 £")
            ListString.Add("150000 $")
            ListString.Add("150000 e")
            ListString.Add("150000 E")
            ListString.Add("150000 à 200000")
            ListString.Add("150000 a 200000")
            ListString.Add("150000 A 200000")
            ListString.Add("150000 de 200000")
            ListString.Add("150000 DE 200000")
            ListString.Add("150000 - 200000")
            ListString.Add("150.000")
            ListString.Add("1.500.000")
            ListString.Add("1,500,000")
            ListString.Add("1.500,000")
            ListString.Add("150,000")
            ListString.Add("150,00")
     
            For Each strg As String In ListString
                MessageBox.Show(strg & "  =>  " & _
                                Regex.Match((Regex.Replace(strg, "(( )(?=\d+))|((\.|,)\d{2}$)|((\.|,)(?=\d{3}))", "")), "\d+").Value)
            Next
    Citation Envoyé par Alexis35 Voir le message
    En espérant avoir fait le tour des possibilités.
    Il ne fait que cela et pas plus.
    Enfin pour les explications, il faut vraiment lire le tuto de StormimOn, tout y est, et très accessible.

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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