Guten Abend liebe Damen und Herren,
ich bin ein Anfänger in VB und ein noch viel blutigerer in Sachen "RegEx".
Aktuell befinde ich mich im "Learning-by-doing"-Prozess und bastle mir meinen Code durch Starthilfen und Beispiele aus dem Netz zusammen wie ich ihn brauche, während ich verstehe, wie das Ganze funktioniert.
Nun bin ich an einen Punkt gestoßen, an dem ich zum allerersten Mal "RegEx" benötige.
Es geht um einen Text folgenden Aufbaus:
[...]data-park-title="Audi RS3" data-park-price-currency="EUR" data-park-price-amount="49570"><span class="btn btn--success btn--unpark btn--s"><i class="gicon-parking-active-s class="rbt-regMilPow">EZ 01/2016, 3.000 km
[...]data-park-title="Audi RS4 quattro" data-park-price-currency="EUR" data-park-price-amount="60690"><span class="btn btn--success btn--unpark btn--s"><i class="gicon-parking-active-s class="rbt-regMilPow">EZ 05/2018, 13.000 km
[...]data-park-title="Audi RS5 Sportback quattro Ceramic DYNAMIK" data-park-price-currency="EUR" data-park-price-amount="74690"><span class="btn btn--success btn--unpark btn--s"><i class="gicon-parking-active-s class="rbt-regMilPow">EZ 07/2019, 5.300 km
[...]
Wie ihr seht, handelt es sich um mehrere Fahrzeuge, gefolgt von ihren Daten. Ich unterscheide zwischen Titel, Preis, Laufleistung, ErstzulassungMonat, ErstzulassungJahr
Diese Daten möchte ich gerne aus dem Gesamttext für jedes Fahrzeug filtern und in mein DataGridView1 als jeweilige Zeile einfügen.
Nach den Einzeldaten filtere ich nun folgendermaßen:
Mit dem "For Each"-Befehl würde ich schließlich den gesamten Text nach allen Fahrzeugen abscannen und mir so nacheinander alle Matches aus dem Regex in ein DataGridView schmeißen lassen.
Dass ich jedoch 4 verschiedene Regex's mit jeweils nur 1 Group (okay, die 4. Regex hat 2 Groups, nämlich "Monat" und "Jahr") dafür benötige, taugt mir nicht.
Ich versuche deshalb alle informationen zu einem Fahrzeug in einer Regex mit 5 Groups abzufragen.
Kann mir jemand behilflich sein, wie ich meine Regular Expressions zu einer zusammenfassen kann? Habe online mit einem Regex Tester bereits viel probiert, komme jedoch nicht auf das gewünschte Ergebnis.
Vielen Dank im Voraus für jede Hilfe.
*Da offenbar VB.NET, Label und BBCode angepasst*
ich bin ein Anfänger in VB und ein noch viel blutigerer in Sachen "RegEx".
Aktuell befinde ich mich im "Learning-by-doing"-Prozess und bastle mir meinen Code durch Starthilfen und Beispiele aus dem Netz zusammen wie ich ihn brauche, während ich verstehe, wie das Ganze funktioniert.
Nun bin ich an einen Punkt gestoßen, an dem ich zum allerersten Mal "RegEx" benötige.
Es geht um einen Text folgenden Aufbaus:
[...]data-park-title="Audi RS3" data-park-price-currency="EUR" data-park-price-amount="49570"><span class="btn btn--success btn--unpark btn--s"><i class="gicon-parking-active-s class="rbt-regMilPow">EZ 01/2016, 3.000 km
[...]data-park-title="Audi RS4 quattro" data-park-price-currency="EUR" data-park-price-amount="60690"><span class="btn btn--success btn--unpark btn--s"><i class="gicon-parking-active-s class="rbt-regMilPow">EZ 05/2018, 13.000 km
[...]data-park-title="Audi RS5 Sportback quattro Ceramic DYNAMIK" data-park-price-currency="EUR" data-park-price-amount="74690"><span class="btn btn--success btn--unpark btn--s"><i class="gicon-parking-active-s class="rbt-regMilPow">EZ 07/2019, 5.300 km
[...]
Wie ihr seht, handelt es sich um mehrere Fahrzeuge, gefolgt von ihren Daten. Ich unterscheide zwischen Titel, Preis, Laufleistung, ErstzulassungMonat, ErstzulassungJahr
Diese Daten möchte ich gerne aus dem Gesamttext für jedes Fahrzeug filtern und in mein DataGridView1 als jeweilige Zeile einfügen.
Nach den Einzeldaten filtere ich nun folgendermaßen:
VB.NET-Quellcode
- 'Filtern nach Titel
- Dim rx1 As New Regex("(?<=\bdata-park-title\b.)(.*?)(?=\bdata-park-price-currency\b)", RegexOptions.IgnoreCase)
- 'Filtern nach Preis
- Dim rx2 As New Regex("\bdata-park-price-amount\b..(\d+)", RegexOptions.IgnoreCase)
- 'Filtern nach Laufleitsung
- Dim rx3 As New Regex("(?<=\bregMilPow\b..............)(.*?)(?=\b.km\b)", RegexOptions.IgnoreCase)
- 'Filtern nach Erstzulassung
- Dim rx4 As New Regex("\bregMilPow\b.....(\d+).(\d+)", RegexOptions.IgnoreCase)
- 'quelltext ist der Name des Textes, aus dem gefiltert werden soll
- Dim Titeltreffer As MatchCollection = rx1.Matches(quelltext)
- Dim Preistreffer As MatchCollection = rx2.Matches(quelltext)
- Dim Kilometertreffer As MatchCollection = rx3.Matches(quelltext)
- Dim EZtreffer As MatchCollection = rx4.Matches(quelltext)
- For Each a As Match In Titeltreffer
- Dim Titel = a.Groups(1).Value
- 'etc.
Mit dem "For Each"-Befehl würde ich schließlich den gesamten Text nach allen Fahrzeugen abscannen und mir so nacheinander alle Matches aus dem Regex in ein DataGridView schmeißen lassen.
Dass ich jedoch 4 verschiedene Regex's mit jeweils nur 1 Group (okay, die 4. Regex hat 2 Groups, nämlich "Monat" und "Jahr") dafür benötige, taugt mir nicht.
Ich versuche deshalb alle informationen zu einem Fahrzeug in einer Regex mit 5 Groups abzufragen.
Kann mir jemand behilflich sein, wie ich meine Regular Expressions zu einer zusammenfassen kann? Habe online mit einem Regex Tester bereits viel probiert, komme jedoch nicht auf das gewünschte Ergebnis.
Vielen Dank im Voraus für jede Hilfe.
*Da offenbar VB.NET, Label und BBCode angepasst*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()