Moins !
Ich versuche nun schon eine ganze Weile folgendes mit Regex zu lösen...
Gegen sei dieser String:
Node ID="CKDevice" State="Online" Status="OK"
Ich möchte folgendes Ergebnis erziehlen:
CKDevice
Mein Versuch war folgender:
ID=".*?"
Das führt aber zu dem Ergebnis:
ID="CKDevice"
Auch was ich z.b. bei stackoverflow gefunden habe löst das Problem nicht:
RegEx: Grabbing values between quotation marks
(Das trifft nicht ganz mein Problem, geht aber in die gleiche Richtung)
Kurzum, gibt es in Regex nicht die Möglichkeit das Match Ergebnis dahingehend zu beeinflussen Zeichen beim Ergebnis zu ignorieren?
Habe schon das Regex PDF hier aus dem Forum durchgeschaut, und auch die Suche bemüht. Konnte aber noch keine Lösung für mein Problem entdecken.
Und wie geschrieben ... die zahlreichen Hinweise auf stackoverflow haben mich auch nicht weiter gebracht.
Hoffe hier kann mir jemand den entscheidenden Kniff nennen 🤔
Greetz Dominik
Du kannst mit () groupieren und mit ?<> kannst du einer Gruppe sogar einen Namen zuweisen also kannst du mit
ID="(.*?)"
eine Gruppe erstellen die du dann unter Match.Groups abfragen kannst.
Lg, XXX
Hi xxxprod,
danke für die Info.
Ist das überhaupt ohne Gruppe lösbar ?
Greetz Dominik
Ist das überhaupt ohne Gruppe lösbar ?
Ist dir eine Lösung mit Gruppe denn zu einfach?
Du kannst auch mit Lookbehinds- sowie Lookaheads anfangen; aber das wird tendenziell eher komplex.
Hallo winSharp93,
nö, das ist auch nicht viel komplexer als mit einer Gruppe. Aus
x(y)z
wird
(?≤x)y(?=z)
Es ist nur unüblicher und daher für die meisten vielleicht ein bisschen schlechter zu verstehen. Allerdings kann es erforderlich sein, Lookarounds zu verwenden, nämlich wenn man irgendwo nur einen Pattern angeben kann (z.B. in einem Eingabefeld oder einer Konfigurationsdatei), ohne dass man Einfluss darauf hat, dass statt mit dem gesamten Match nur mit einer bestimmten Gruppe weitergearbeitet wird.
Hallo moelski, hallo xxxprod,
im konkreten Fall macht es keinen (großen) Unterschied, aber im allgemeinen ist es sicherer
ID="([^"]*)"
statt
ID="(.*?)"
zu verwenden, siehe RegEx kürzester Match [und die Gefahren von .*?].
herbivore
Moins !
Es ist so wie herbivore sagt. Ich habe eine DB in der ich Regex speichern muss die automatisch ausgewertet werden. Ein "Durchforsten" der Gruppen ist in dem Fall leider nicht möglich (oder nur mit enormem Mehraufwand).
@herbivore: Ich werde das mal mit Look-Aheads versuchen. Wenn ich nicht weiterkomme würde ich mich nochmal melden.
Greetz Dominik