Ansicht:   

#304313 regular Expressions (pc.coding)

verfaßt von MudGuard zur Homepage von MudGuard, München, 23.02.2012, 09:46:17

Ok. Die [ und ] direkt entfernen (sprich: erstes + letztes Zeichen weg).

Ich setze mal _ an den Stellen, wo eigentlich ein Leerzeichen ist.

Dann gibt\'s zwei Möglichkeiten:
1. die nicht in \\\"\\\" eingefaßten Teile sind immer NULL bzw. 0

Dann funktioniert

(?:(?<=\\\\\"),_)|(?:,_(?=\\\\\"))|(?:(?<=NULL),_)|(?:,_(?=0))



2. die nicht in \\\"\\\" eingefaßten Teile sind variabel.
Dann hilft (mit vertretbarem Aufwand) nur zweistufiges Vorgehen:
Erster Split mit

(?:(?<=\\\\\"), )|(?:, (?=\\\\\"))


Dann die Teile, die nicht mit \\\" beginnen, mit einem einfachen

,_


nochmal splitten.


Erklärung:
| ist ein \"oder\".
Der erste Ausdruck besteht also aus vier Teilen, die mit Oder verknüpft sind (der zweite Ausdruck besteht aus den ersten beiden Teilen, den erkläre ich also nicht nochmal extra)

Um jeden Teil ist eine nichtmerkende Klammer (?:), damit das Oder sich auf den ganzen Teilausdruck bezieht.

Der erste Teil (?<=\\\\\"),_ sucht nach Komma gefolgt von Leerzeichen, und verlangt, daß davor (positive Lookbehind (?<=) )ein \\\" steht - der \\ muß aber escaped werden, daher \\\\\"

Der dritte Teil (?<=NULL),_) ist praktisch das gleiche, nur daß der positive Lookbehind diesmal nach NULL guckt.

Rein theoretisch könnte man die beiden Fälle auch zusammenfassen, aber viele Regex-Engines können Lookbehind nur mit konstanter Länge ==> lieber per Oder verknüpfen.

Der zweite Teil ,_(?=\\\\\") sucht nach Komma gefolgt von Leerzeichen, und per positive Lookahead (?=) wird noch geguckt, ob danach \\\" (mit escapedtem \\) steht.

Der vierte Teil ist wieder praktisch das gleiche, nur wird diesmal per positive Lookahead nach 0 geguckt.



Die Lookaheads/Lookbehinds sind nötig, da die darin enthaltenen Teile nicht Teil des Suchergebnisses sein sollen, denn das Suchergebnis wird beim Splitten ja aus dem String rausgeschnitten. Die Look-arounds sorgen aber dafür, daß nur die richtigen Kommata gefunden werden.


Zum Testen von Regexen empfehle ich den Regex Coach, da kann man schön drin rumprobieren.

--
[image]
MudGuard
O-o-ostern

 

gesamter Thread:

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz