Hilfe benötigt bei Regular Expressions

05/26/2017 21:28 Dremorac#1
Einen schönen Abend wünsche ich, meiner beginnt aktuell nicht so gut
aber evtl. lässt sich das mit etwas Hilfe ändern!

Ich möchte von einer Webseite bzw nach dem Login bestimmte Daten auslesen.
Die von User zu User unterschiedlich sind, dafür möchte ich Regex verwenden.

Um nun auf den Punkt zu kommen, hier einige Code Ausschnitte:

regex Function:

Hier habe ich bereits versucht: str = (m.Groups(0).Value) den Integer 0 durch 1 zu ersetzen jedoch kein Erfolg.

Aufruf der Function:

Hier versuchte ich auch den Sourcecode über den Browser zu verwenden wo 1 Abweichung fest zu stellen war: keine \ enthalten.
Was ich jedoch nicht Sinnvoll fand da die \ im String mit dem ich arbeite enthalten sind warum sollte ich sie dann entfernen!? Dann würde es sich mir ergeben das ich keine Matches habe.

Ausgabe des Ergebnisses:

Text innerhalb des HTML Codes:

An diesen Text innerhalb der HTML Codes bin ich gekommen indem ich mir einfach den Text meines source Strings in einer MsgBox ausgab.

Theoretisch sollte ich also am Ende von der Ausgabe der Function den Text:
"Credits: 423.273", in meinem Label stehen haben, jedoch steht lediglich "Credits: " darin.

Hoffe jemand kann mir eine Lösung zu meinem Problem bieten.

MfG: Dremorac
05/27/2017 17:32 florian0#2
Bist du sicher, dass der HTML Code so aussieht, und nicht etwa so?
Code:
<span class=\"money\">423.273<\/span> Credits
(Man beachte das "=" nach dem "class" )
05/27/2017 18:06 Dremorac#3
Danke für deine Antwort: florian0, jedoch bin ich mir sicher das dies der Korrekte Text in meinem String ist.
Grund für diese Feststellung ist, dass ich weitere Regex Funktionen Implementiert habe:


Jedoch bekomme ich bei keiner eine Korreckte ausgabe des gewünschten Wertes.

#Update1: Ich habe nun meine Regex Function umgeschrieben:


Nun bekomme ich zumindest die Aussage "No Match" als Ausgabewert im Label!
Also habe ich doch einen Fehler in meinen Pattern!
Ich werde mir das ganze ansehen und diesen Post bei Bedarf erneut Aktualisieren.

#Update 2: Bedauerlicherweise gibt mir meine Funktion immer No Match zurück.
Selbst wenn ich lediglich:
Code:
([^<]*)
bei den Pattern eintrage.

Demzufolge muss an der Function etwas faul sein!

MfG: Dremorac
05/27/2017 22:35 Ludder231#4
Versuch mal das "(.*?)" pattern. :) Damit teste ich immer.
05/27/2017 23:30 Dremorac#5
Leider bekomme ich auch mit "(.*?)" eine No Match ausgabe.
Jedoch werde ich einfach meine Lehrer austricksen,
indem ich das Programm in C# schreibe und Compiled für das Projekt nehme.

Danke allen die versuchten mir zu helfen auch an alle im DiscordServer! :)

MfG: Dremorac
05/28/2017 01:41 EngelEatos#6
Der Vollständigkeit halber:

Code:
Dim src As String = "<span class=""money"">423.273</span> Credits"
MsgBox(rgx(src, "<span class=""money"">([^<]*)</span> Credits"))
MsgBox(rgx(src, "<span class=""money"">(.*?)</span> Credits"))
Code:
Public Function rgx(src As String, pattern As String) As String
    Dim str As String = Nothing
    For Each m As Match In (New Regex(pattern).Matches(src))
        str = (m.Groups(1).Value)
    Next
    Return str
End Function
([Only registered and activated users can see links. Click Here To Register...])

Beide Pattern funktionieren wunderbar

Edit:
Ich glaube, es lag daran, wie du deine double quotes escaped hast.
in vb.net macht macht man das so: " -> ""
Und du hast es C#-like gemacht. Kann deinen Fehler damit auch reproduzieren.
05/28/2017 01:43 Dremorac#7
Ich werde es dennoch einmal austesten ob dies die Lösung wäre!
Herzlichen dank für deine Antwort.

#Update 1: Jetzt klappt alles wunderbar so wie es soll!
Hätte nicht gedacht das VB.NET derart viele
Code:
"
haben möchte.

MfG: Dremorac
05/28/2017 05:35 EngelEatos#8
Sry. hab mich selbst mit der Anzahl der benötigten quotes vertan. Habs im Post oben ausgebessert. vb.net ist für mich doch schon bisschen zu lange her.
05/29/2017 23:12 Njahs#9
Wenn du öfters (komplexe) Pattern erstellst würde ich dir externe Programme wie beispielsweise Regex Hero ans Herz legen.
Einziger Nachteil dabei ist, dass du das Pattern beim späteren einfügen in deinen Code noch selbst escapen musst.

Grüße
05/30/2017 00:54 Syc#10
Warum benutzt du denn regex für HTML? Gibt doch entsprechende libraries um HTML anständig zu parsen.

Mit regex machst du dir hier das Leben nur schwer.
05/30/2017 12:11 Dremorac#11
Das lag daran dass ich dabei etwas Lernen möchte.
Ich weiß Shadow992 hat es mir auch bereits gesagt da reicht eine einfache: GetStringBetween Function die es zum nachwerfen gibt.

Jedoch will ich nicht C&P lernen (C&P ... hehe, lernen ... hehe xD)
sondern auch mein wissen erweitern.

Davon abgesehen bin ich jetzt gerade an einem Punkt angelangt,
wo ich für mein Programm werte auslesen muss die sich x mal im source wiederholen können.
Diese Werte kann ich am Ende einfach in einer ListBox ausgeben.
Also um auch Programmcode und somit am Ende auch MB zu sparen
gleich die Variante verwenden die man ohnehin benötigt,
auch wenn es erst später Sinnvoll ist diese Methode anzuwenden.

Danke nochmal allen für die Hilfe und auch für eure Kritik zu meiner Denkweise
bzw. Anfänglich Nutzlosen Functions-Anwendung.

MfG: Dremorac