[VB.Net] RegEx Problem (Quellcode, Zeilenumbruch)

04/29/2013 18:32 maxasoft#1
Hab hier nen kleinen Bot geschrieben, welcher nun einen Wert im Quelltext einer Seite auslesen soll.

Folgenden Teil brauch ich:

Code:
Es erfordert viel Disziplin und Ausdauer eine Kampfkunst zu erlernen. </span></a></span></a><br />
                    Erhöht ATT um 1<br />
                    Nächste Stufe: &euro;5,00<br />
                    Dauer:  0:11:40
Wie finde ich dieses Stück per Regex?

ich habe es bereits so probiert:

Code:
Try
            Dim r As New Regex("Es erfordert viel Disziplin und Ausdauer eine Kampfkunst zu erlernen. </span></a></span></a><br />            Erhöht ATT um 1<br />            Nächste Stufe: &.*?>")
            Dim matches As MatchCollection = r.Matches(RichTextBox1.Text)
            For Each Match As Match In matches
                MsgBox(Match.Value)
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
Leider erzielte diese Suche keine Treffer.

Würde mich über schnelle Hilfe freuen, Danke im Vorraus :-)
04/29/2013 19:06 'Heaven.#2
Poste mal den ganzen Quellcode
04/29/2013 20:03 maxasoft#3
Quote:
Originally Posted by 'Heaven. View Post
Poste mal den ganzen Quellcode
04/29/2013 20:12 Schlüsselbein#4
Muss dein Bot viel und oft auslesen? Dann schau dir mal einen richigen Parser an und binde den mit ein. Das ist nicht nur leichter, sondern auch viel flexibler.



Gruß
04/29/2013 22:50 'Heaven.#5
OMG, nutz den code und den spoiler tag, für sowas bekommt man eig ne warning
04/29/2013 23:22 tolio#6
@Te du musst bedenken das nicht immer regex einfach zum ziel führt, manchmal ist es auch eine kombination von splits oder von beidem.
Sicherlich kann man für alles gesuchte ein entsprechenden regex ausdruck finden jedoch macht der aufwand nicht immer sinn
04/30/2013 11:03 dready#7
[Only registered and activated users can see links. Click Here To Register...]

Das fand ich ganz nett für sowas.

Ansonsten was Tolio schon sagte
Splitte das Ding in kleinere Teile auf, schon allein damit du dir graue Haare ersparst beim Fehlersuchen ;)
04/30/2013 12:13 'Heaven.#8
PHP Code:
    Dim str As String IO.File.ReadAllText("C:\Users\Heaven\Desktop\test.htm")

        
Dim iPos As IntegeriEnd As Integer
        Dim strResult 
As String
        strResult 
String.Empty
        
iPos str.IndexOf("<td><img src=" Chr(34) & "http://static.pennergame.de/img/pv4/icons/attack.jpg" Chr(34) & "/></td>"1)
        
iEnd str.IndexOf("</td>"iPos 74)
        If 
iPos <> -1 AndAlso iEnd <> -1 Then
            strResult 
str.Substring(iPos 74iEnd - (iPos 74))
        
End If
        
MsgBox((strResult.Split(">")(11) & vbNewLine strResult.Split(">")(12) & vbNewLine strResult.Split(">")(13)).Replace("<br /""")) 
str ist dein Quellcode und die msgbox gibt dir deine werte aus
04/30/2013 14:16 Kraizy​#9
PHP Code:
Dim ergebnis As String html.Substring(html.IndexOf("Es erfordert viel Disziplin und Ausdauer eine Kampfkunst zu erlernen.")).Split({"</td>"}, StringSplitOptions.None)(0).Replace("</a>""").Replace("</span>""").Replace("<br />""").Trim() 
Keine Ahnung, wieso ihr immer versuchen wollt RegEx zu benutzen, wenn ihr das eh net kapiert und danach hier im Forum um Hilfe bittet. Gibt doch genug andere Möglichkeiten, die viel simpler sind und genauso gut funktionieren.
04/30/2013 17:58 maxasoft#10
Quote:
Originally Posted by Kraizy​ View Post
PHP Code:
Dim ergebnis As String html.Substring(html.IndexOf("Es erfordert viel Disziplin und Ausdauer eine Kampfkunst zu erlernen.")).Split({"</td>"}, StringSplitOptions.None)(0).Replace("</a>""").Replace("</span>""").Replace("<br />""").Trim() 
Keine Ahnung, wieso ihr immer versuchen wollt RegEx zu benutzen, wenn ihr das eh net kapiert und danach hier im Forum um Hilfe bittet. Gibt doch genug andere Möglichkeiten, die viel simpler sind und genauso gut funktionieren.
Danke, klappt perfekt :-)

Allerdings interessiert es mich immernoch, wie ich in RegEx über die Zeilensprünge hinweg suchen kann, hat da jemand ne Lösung?

Und muss ich mit VbCrlf arbeiten oder geht das ohne?
05/01/2013 02:08 #SoNiice#11
Für Zeilenumbrüche in Texten: \n - \r\n

Probier's doch einfach mal damit, bin mir nicht sicher ob es in Visual Basic genauso ist, aber in C# ist es aufjedenfall so ;-)
05/01/2013 11:22 tolio#12
ja im regex auch in vb \r\n
05/01/2013 11:57 maxasoft#13
Hm ok ich werde es mal testen. Aber nochmal zu der methode, die Kraizy mir nahegebracht hat, wenn ich dann den Rest per Replace entferne, sodass ich nurnoch die Zeit habe, bleiben die Leerzeichen & Zeilenumbrüche im String immernoch bestehen, also so:

Code:
  
  
  
0:12:34
Ich habs bereits so versucht:

Code:
Dim ergebnis As String = html.Substring(html.IndexOf("Es erfordert viel Disziplin und Ausdauer eine Kampfkunst zu erlernen.")).Split({"</td>"}, StringSplitOptions.None)(0).Replace("</a>", "").Replace("</span>", "").Replace("<br />", "").Trim()
            ergebnis = ergebnis.Replace("Es erfordert viel Disziplin und Ausdauer eine Kampfkunst zu erlernen.", "")
            ergebnis = ergebnis.Replace("Nächste Stufe: &euro;5,00", "")
            ergebnis = ergebnis.Replace("Dauer:  ", "")
            ergebnis = ergebnis.Replace("Erhöht ATT um 1", "")
            ergebnis = ergebnis.Replace(" ", "")
            ergebnis = ergebnis.Replace(vbCr, "")
            ergebnis = ergebnis.Replace(vbCrLf, "")
05/01/2013 12:20 Kraizy​#14
Du musst doch nur bei jeder neuen Zeile splitten
PHP Code:
Dim s1 As String ergebnis.Split(CChar(vbNewLine))(0//Es erfordert...
Dim s2 As String ergebnis.Split(CChar(vbNewLine))(1//Erhöht ATT um 1
Dim s3 As String ergebnis.Split(CChar(vbNewLine))(2//Nächste Stufe
Dim s4 As String ergebnis.Split(CChar(vbNewLine))(3//Dauer 
05/01/2013 12:23 maxasoft#15
Vielen Dank, aber was bewirkt dieses splitten genau?