Hallo zusammen,
ich habe gerade ein kniffliges problem und hoffe mir kann jemand helfen Google kann es irgendwie nicht.
Also ich versuche einen recht langen string (html code) mit regex nach einem trefferschema zu durchsuchen und mir die resultate zurück geben zu lassen. Dabei muss ich mitunter einige schemas durchgehen (for schleife) bis es treffer gibt (max. 5 im moment).
Soweit funktioniert es auch gut. Das problem was ich habe ist, das sich regex scheinbar wahllos aufhängt.
Hier erst einmal mein code:
Der pattern bei dem er jetzt gerade hängt ist (aber wie gesagt, scheint sich wahllos bei irgend einem pattern aufzuhängen):
(Kann man das vielleicht noch optimieren? Bin mit regulären ausdrücken nicht so der guru Brauche ja nur den link.)
Das ganze hängt nicht bei "matches = r.Matches(html)", sondern erst in der nächsten zeile, bei "Debug.Print(matches.Count)".
Wenn ich die ausführung unterbreche dann ist die zeile grün hinterlegt. Bleibe ich mit der maus auf "matches.count" dann kommt die message "error: cannot obtain value".
Habe auch schon ein abfangen mit "try" versucht. Aber kann ja nicht funktionieren da er richtig bei der zeile hängt und sich nicht mehr rührt. Auch ein beenden des backgroundworkers ist nicht möglich da er nicht die ausführung von "BackgroundWorker1.CancellationPending" erreicht. Der backgroundworker hängt und das wars.
Mein verdacht ist das dass html vielleicht manchmal nicht valide ist und (z.B.) ein "</li>" fehlt und es deswegen regex entschärft?
(Das ganze läuft im backgroundworker.)
Ich hoffe ihr könnt mir dabei helfen.
Viele Grüße
Chaosprogrammierer
ich habe gerade ein kniffliges problem und hoffe mir kann jemand helfen Google kann es irgendwie nicht.
Also ich versuche einen recht langen string (html code) mit regex nach einem trefferschema zu durchsuchen und mir die resultate zurück geben zu lassen. Dabei muss ich mitunter einige schemas durchgehen (for schleife) bis es treffer gibt (max. 5 im moment).
Soweit funktioniert es auch gut. Das problem was ich habe ist, das sich regex scheinbar wahllos aufhängt.
Hier erst einmal mein code:
VB.NET-Quellcode
- Dim pattern As String = RankingQueries(I, 5).ToString
- Debug.Print(pattern)
- ' Instantiate the regular expression object.
- Dim r As Regex = New Regex(pattern)
- matches = r.Matches(html)
- Debug.Print(matches.Count)
- If matches.Count < 150 And matches.Count > 0 Then
- matchcount = 0
- resPosition = 0
- 'Do While m.Success
- For Each m As Match In matches
- matchcount += 1
- If InStr(m.Groups(RankingQueries(I, 6).ToString).Value, domain) > 0 Then
- 'yes, found it
- resPosition = matchcount
- Exit For
- End If
- System.Threading.Thread.Sleep(0)
- If MainForm.BackgroundWorker1.CancellationPending = True Then Exit Function
- Next
- If matchcount > 0 Then Exit For
- If MainForm.BackgroundWorker1.CancellationPending = True Then Exit Function
- End If
- matches = Nothing
- If MainForm.BackgroundWorker1.CancellationPending = True Then Exit Function
- System.Threading.Thread.Sleep(0)
- If resPosition > 0 Then Exit For
Der pattern bei dem er jetzt gerade hängt ist (aber wie gesagt, scheint sich wahllos bei irgend einem pattern aufzuhängen):
(Kann man das vielleicht noch optimieren? Bin mit regulären ausdrücken nicht so der guru Brauche ja nur den link.)
Das ganze hängt nicht bei "matches = r.Matches(html)", sondern erst in der nächsten zeile, bei "Debug.Print(matches.Count)".
Wenn ich die ausführung unterbreche dann ist die zeile grün hinterlegt. Bleibe ich mit der maus auf "matches.count" dann kommt die message "error: cannot obtain value".
Habe auch schon ein abfangen mit "try" versucht. Aber kann ja nicht funktionieren da er richtig bei der zeile hängt und sich nicht mehr rührt. Auch ein beenden des backgroundworkers ist nicht möglich da er nicht die ausführung von "BackgroundWorker1.CancellationPending" erreicht. Der backgroundworker hängt und das wars.
Mein verdacht ist das dass html vielleicht manchmal nicht valide ist und (z.B.) ein "</li>" fehlt und es deswegen regex entschärft?
(Das ganze läuft im backgroundworker.)
Ich hoffe ihr könnt mir dabei helfen.
Viele Grüße
Chaosprogrammierer