RegEx funktioniert nicht wie erwartet

Hallo,

ich möchte gern die Suchen und Ersetzen Funktion nutzen um wie folgt zu filtern:

Ist: Bördelrandspannstift 6 x 60 blau

Soll: 6 x 60


Diese RegEx sollte das Gewünschte filtern (und noch etwas mehr):

([M]?\d{1,4}(?:\sm{1,2})?(?=\sx\s)(?:\sx\s\d{1,4}(?:\sm{1,2})?){0,4})


Bei Ersetzen habe ich einfach die Backreference $1 eingetragen.


Aber anstatt nur "6 x 60" auszugeben, wird nichts gefiltert und alles ausgegeben???


Was ist hier mein Denkfehler?


Gruß Dirk

Noch ein Bild zur Verdeutlichung:

image



Hallo Dirk,


die Suchen & Ersetzen Funktion ersetzt den gefundenen Teilstring Wert im Orginalwert. Wenn du im "Ersetzen durch" Feld die Backreference $1 verwendest, wird im Wert der gematchten Teilstring "6 x 60" durch "6 x 60" ersetzt. Es wird nicht der komplette String aus dem Wert Feld ersetzt. Im Screenshot habe ich zur Verdeutlichung mal Klammern um $1 gepackt. So kann man besser erkennen, dass der Teilstring korrekt ersetzt wird (siehe Spalte "name").


Im einfachsten Fall kannst du deine Regex vor und nach der Klammen mit .* erweitern. Damit sollten alle anderen Zeichen aus dem Wert entfernt werden.


.*([M]?\d{1,4}(?:\sm{1,2})?(?=\sx\s)(?:\sx\s\d{1,4}(?:\sm{1,2})?){0,4}).*




Viele Grüße

Torsten

Danke Torsten, manchmal will ich einfach nur Urlaub ;-)

Leider funktioniert es doch nicht sauber.

Die Gruppe habe ich, zur besseren Sichtbarkeit, in Klammern gesetzt.

Wenn ich den Ausdruck mit ".*" umschließe wird aus "76 x 18," -> "(6 x 18)"

Wenn ich den Ausdruck nicht um ".*" erweitere "(76 x 18),"

Ich habe keine Ahnung warum das erste Zeichen verschluckt wird.



P.S. Ich habe das jetzt über eine weitere Spalte gelöst. Hat also keine Eile.

Hallo Dirk,


anderer Vorschlag: Du könntest auch das Freemarker ?matches Build-In verwenden. Das hätte den Vorteil das nur die Matches ausgeben werden und nicht der Umweg über Suchen & Ersetzen gemacht werden muss:


<#assign res = result['text']!?matches("([M]?\\d{1,4}(?:\\sm{1,2})?(?=\\sx\\s)(?:\\sx\\s\\d{1,4}(?:\\sm{1,2})?){0,4})")><#list res as m>${m}</#list>


(Hinweis: die \ müssen escaped werden, deshalb \\ )





Viele Grüße

Torsten