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 :

probleme de regex [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut probleme de regex
    Bonjour,
    je sais qu'il y a pas de cours ou d'exemple de regex sur le forum mais j'ai un problème dans mon parsing
    voici la source
    <strong class="number has-tooltip cursor-pointer">
    143,10&nbsp;€
    </strong>

    le rouge c'est ce que je cherche à récupérer

    j'ai essayé différente regex mais rien ne marche

    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
            Dim r As New Regex("pointer"">([\w\s]+)&nbsp")
     
            If r.IsMatch(strpage) Then
     
                Dim m As Match
     
                For Each m In r.Matches(strpage)
     
                    Dim Result As String
     
                    Result = m.Groups(1).ToString
     
            If m.Success Then
                MessageBox.Show("Résultat: " + m.Groups(1).Value)
     
            End If
     
                Next
    end if
    quand je test juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim r As New Regex("pointer"">([\w\s]+)&nbsp")
            Dim m As Match
            m = r.Match("cursor-pointer"">149,00&nbsp")
     
            If m.Success Then
                MessageBox.Show("Résultat: " + m.Groups(1).Value)
     
            End If
    merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    je sais qu'il y a pas de cours ou d'exemple de regex sur le forum
    Sur le forum, non... mais sur le site, oui
    http://stormimon.developpez.com/dotn...ns-regulieres/

    Essaie avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Dim pattern = "<strong class=""number has-tooltip cursor-pointer"">" _
                    & "([\d,]+)&nbsp;€" _
                    & "</strong>"
        Dim input = "<strong class=""number has-tooltip cursor-pointer"">" _
                    & "143,10&nbsp;€" _
                    & "</strong>"
        Dim m As Match = Regex.Match(input, pattern)
        Dim value As String = m.Groups(1).Value
    Cela dit les regex ne sont pas vraiment le meilleur moyen de parser du HTML... il vaudrait mieux utiliser un outil comme HTML Agility Pack

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    Oops pardon je voulais dire plein de cours ou d'exemple

    Et en ce qui concerne ton code ca marche juste sur l 'exemple mais si je lance la lecture sur toute la source il me trouve rien le même problème que j'ai avec mon 2e code ou je me suis tromper par contre c'etais (.*) ou ([\w\s\S\r\n]+) qui marche,
    et encore quand je lance avec ([\w\s\S\r\n]+) il me trouve qu'un resultat et c'est tout la page a partir du premier "strong class=""number has-tooltip cursor-pointer"

    et pour ce qui est du htmlagilitypack j'ai pas trop comprit comment ca marchais
    bien que j'ai vu ou tu donnée un exemple de code sur
    http://www.developpez.net/forums/d11...x-mal-formule/
    je vois pas trop comment l'adapté a mon cas

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Un exemple avec Html Agility Pack pour ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim doc = New HtmlDocument()
    Dim wc = New WebClient()
    Using stream = wc.OpenRead(urlDeLaPage)
    	doc.Load(stream)
    End Using
    Dim tags = doc.Descendants("strong").Where(Function(t) t.GetAttributeValue("class", Nothing) = "number has-tooltip cursor-pointer")
    Dim values = tags.Select(Function(t) t.InnerText)

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    ça me met :
    Erreur 1:'Descendants' n'est pas un membre de 'HtmlAgilityPack.HtmlDocument'

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par cha23 Voir le message
    ça me met :
    Erreur 1:'Descendants' n'est pas un membre de 'HtmlAgilityPack.HtmlDocument'
    Ah oui j'ai oublié un bout... en fait c'est ... doc.DocumentNode.Descendants(...

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    alors quand je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim tags = doc.DocumentNode.Descendants("strong").Where(Function(t) t.GetAttributeValue("class", Nothing) = "number has-tooltip cursor-pointer")
    ça me met une longue erreur:
    Erreur 1 La résolution de surcharge a échoué, car aucun 'Where' accessible ne peut être appelé avec ces arguments*:
    Méthode d'extension 'Public Function Where(predicate As System.Func(Of HtmlAgilityPack.HtmlNode, Integer, Boolean)) As System.Collections.Generic.IEnumerable(Of HtmlAgilityPack.HtmlNode)' définie dans 'System.Linq.Enumerable'*: La fonction imbriquée n'a pas une signature compatible avec le délégué 'System.Func(Of HtmlAgilityPack.HtmlNode, Integer, Boolean)'.
    Méthode d'extension 'Public Function Where(predicate As System.Func(Of HtmlAgilityPack.HtmlNode, Boolean)) As System.Collections.Generic.IEnumerable(Of HtmlAgilityPack.HtmlNode)' définie dans 'System.Linq.Enumerable'*: La résolution de surcharge a échoué, car aucun 'GetAttributeValue' accessible n'est plus spécifique pour ces arguments*:
    'Public Function GetAttributeValue(name As String, def As Boolean) As Boolean'*: Pas plus spécifique.
    'Public Function GetAttributeValue(name As String, def As Integer) As Integer'*: Pas plus spécifique.
    'Public Function GetAttributeValue(name As String, def As String) As String'*: Pas plus spécifique
    et j'ai verifié que copie local est bien sur true
    et si par ailleurs tu serais ou je pourrais trouver un tutoriel en francais

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Remplace Nothing par "", ça devrait passer

  9. #9
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    Merci Tomlev par contre je n'arrive pas a afficher les données a partir de tes lignes de commande je suis encore un petit nouveau dans la programmation

    et si par ailleurs tu avais un tutoriel a me conseiller

    Merci encore

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Avec mon code, values est une collection qui contient les textes recherchés. Donc il suffit de faire une boucle pour récupérer chaque valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each v In values
        MessageBox.Show(v)
    Next

  11. #11
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    ça marche nickel par contre ça m'affiche en plus des chiffres
    &nbsp;& # 8 3 6 4 ;
    (j'ai mit des espaces sinon ca mettais le sigle €)

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par cha23 Voir le message
    ça marche nickel par contre ça m'affiche en plus des chiffres
    &nbsp;€
    Oui, le code que j'ai donné ne fait qu'extraire le contenu de l'élément HTML. Ensuite il faut retraiter le texte lui-même pour obtenir ce que tu veux (avec une regex ou autre chose)

  13. #13
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    je vais essayer ça mais c'est vrai que c'est beaucoup plus simple a extraire des données

    Merci beaucoup pour ton aide

  14. #14
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2012
    Messages : 40
    Par défaut
    Bon bah j'ai résolu mon problème en traficotant un peu
    j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(Split(Replace(v, " ", ""), "&nbsp")(0))
    merci encore

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

Discussions similaires

  1. Probleme avec REGEX sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 18/07/2006, 21h02
  2. [RegEx] Probleme de Regex
    Par keil dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2006, 15h14
  3. probleme de regex! (debutant)
    Par kriskikout dans le forum Langage
    Réponses: 7
    Dernier message: 26/06/2006, 00h00
  4. [langage] autre probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2004, 18h01
  5. [langage] probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 16h36

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