Regex vraagje ?

Status
Niet open voor verdere reacties.

hanonymouss

Gebruiker
Lid geworden
7 sep 2011
Berichten
283
Hallo iedereen,

Ik probeer via regex inhoud van een site op te halen met deze code.

[CPP] Dim x As New WebClient()
Dim source As String = x.DownloadString(TextBox1.Text)
Dim regex = New Regex("<span id=""form:haltebord:0:lblBestemming"">(.*)</span>")

For Each m As Match In regex.Matches(source)
Dim result As String = m.Groups(1).Value
ListView1.Items.add ( result)

Next[/CPP]

Het ophalen lukt, maar doet niet wat ik vraag ?

Dus bijvoorbeeld als een site deze informatie bevat:
- geel
- groen
- blauw
- rood
- paarse

wil ik ook graag dat de regex deze informatie(groen,blauw,rood,paars) ook in de listview toevoegd. Het eerste woord(geel) wordt toegevoegd en de rest niet.

Toen ik de inhoud van de site zag merkte ik op dat iedere kleur een nummer kreeg in volgorde.

Dus bijvoorbeeld: <span id=""form:haltebord:0:lblBestemming"">geel</span> dus de kleur geel kreeg de nummer 0 en voor de kleur groen kreeg dan een nummer 1 en zo verder...

nadien heb ik de regex veranderd van:

[CPP] Dim regex = New Regex("<span id=""form:haltebord:0:lblBestemming"">(.*)</span>")[/CPP]

naar:

[CPP] Dim regex = New Regex("<span id=""form:haltebord:""(.*)"":lblBestemming"">(.*)</span>")[/CPP]

maar ook zo kreeg ik de resultaten niet.

Alvast Bedankt
 
Je kan proberen met een loop door de nummers heen te gaan. Het zal waarschijnlijk wel trager worden daardoor...

MartinJM
 
Ik heb het probleem inmiddels al opgelost. :thumb:

Dit heb ik in mijn code veranderd:

[CPP] Dim regex = New Regex("<span id=""form:haltebord:(.*?):lblBestemming"">(.*?)</span>")[/CPP]

Ik heb dus (.*?) toegevoegd tussen de dubbelpunten en in de for each loop heb ik deze Dim results As String = mm.Groups(2).Value code gebruikt.

Maar er duikt het volgende probleem op: wanneer ik de code toevoeg in mijn listview, wordt dan alles 8dubbel weergegeven ?

Hier is de verniewde code:

[CPP] ListView1.Items.Clear()
Dim x As New WebClient()
Dim source As String = x.DownloadString(TextBox1.Text)
Dim regex = New Regex("<span id=""form:haltebord:(.*?):lblBestemming"">(.*?)</span>")
Dim regexx = New Regex("<span id=""form:haltebord:(.*?):verwacht"">(.*?)</span>")

Dim match = regexx.Match(source)

For Each mm As Match In regexx.Matches(source)
Dim li As ListViewItem
Dim results As String = mm.Groups(2).Value

For Each m As Match In regex.Matches(source)
Dim result As String = m.Groups(2).Value
li = ListView1.Items.Add(result)
li.SubItems.Add(results)
Next

Next[/CPP]

De eerste tab wordt de bestemming toegevoegd en en de tweede tab de verwachting

de informatie haal ik van daaruit: http://reisinfo.delijn.be/realtime/halte/105455/8
 
Laatst bewerkt:
Ik bedoelde zoiets:
[CPP]Dim x As New WebClient()
Dim source As String = x.DownloadString(TextBox1.Text)

Dim i As Integer = 0

Do
Dim regex = New Regex("<span id=""form:haltebord:" & i & ":lblBestemming"">(.*)</span>")
Dim i2 As Integer = 0

For Each m As Match In regex.Matches(source)
Dim result As String = m.Groups(1).Value
ListView1.Items.Add(result)
i2 += 1
Next

If i2 = 0 Then
Exit Do
End If
i += 1
Loop[/CPP]

Ik heb zelf nog nooit iets met regex gedaan, dus ik weet er niet zoveel vanaf....

Succes!
MartinJM
 
Dank u wel MartinJM het werkt perfect.

Ik heb een lisview met 2 kolommen bestemming en verwacht.

waneer ik deze code gebruik:

[CPP] ListView1.Items.Clear()
Dim x As New WebClient()
Dim source As String = x.DownloadString(TextBox1.Text)
Dim regex = New Regex("<span id=""form:haltebord:(.*?):lblBestemming"">(.*?)</span>")
Dim regexx = New Regex("<span id=""form:haltebord:(.*?):verwacht"">(.*?)</span>")

Dim match = regexx.Match(source)

For Each mm As Match In regexx.Matches(source)
Dim li As ListViewItem
Dim results As String = mm.Groups(2).Value

For Each m As Match In regex.Matches(source)
Dim result As String = m.Groups(2).Value
li = ListView1.Items.Add(result)
li.SubItems.Add(results)
Next

Next[/CPP]

wordt zowel de bestemming kolom en verwacht kolom gevuld, maar dan 8 keer dubbel.
Ik heb all mogelijkheden geprobeerd en deze was het beste die ik kon vinden. Ik hoop dat jullie een oplossing kunnen vinden.

Alvast Bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan