Free Trial

Forum - Deutsch

Suchen Sie nach Antworten, stellen Sie Fragen und teilen Sie Ihr Alteryx-Wissen.
GELÖST

Parsen - RegEx

Ellen12345
Atom

Hallo Zusammen, ich bin neu hier und möchte folgendes Problem lösen.

Ich habe in einer einzelnen Spalte einer Exceltabelle folgende Angaben:

 

CAPGEMINI SE INH. EO 8 9,00000 STK Kurs 204,376250 Kurswert 1.839,39 EUR Fremde Spesen -1,12 EUR Umsatzsteuer -0,22 EUR

 

Nun möchte ich aus dieser einen Spalte mehrere Spalten machen:

 

1. Neue Spalte 1 soll die Bezeichnung beinhalten, die beliebig viele Zeichen, Buchstaben, Zahlen enthalten kann. Die Bezeichnung beginnt am Anfang der Spalte und endet vor der Zahl mit dem 1. Komma:

CAPGEMINI SE INH. EO 8

Also als Ende der Bezeichnung könnte man darauf abstellen, dass einen Dezimalzahl kommt mit x Stellen vor dem Komma und 5 Stellen nach dem Komma, hier im Beispiel 9,00000

2. Mir würde es reichen, wenn der Rest in einer zweiten Spalte geschrieben wird, den kann ich dann über Text in Spalten aufteilen über das Leerzeichen und über die Auswahl der Spalten die Outputtabelle gestalten.

 

Ich habe mich im Tool RegEx mit Parse versucht, komme aber nicht weiter.

 

Ich wäre sehr dankbar, wenn mir jemand helfen könnte.

 

Vielen Dank! Elli

6 ANTWORTEN 6
akku
Bolide

Hallo Elli,

 

ich kenne mich mit regex auch kaum bis gar nicht aus, habe aber trotzdem einen Lösungsvorschlag für deinen Anwendungsfall.

Ich glaube auch, dass die so passen könnte, auch wenn es bestimmt deutlich eleganter gehen könnte.

 

Mit dem regex erzeuge ich die zweite Spalte, ab der Dezimalzahl.

Als nächstes erzeuge ich im Formeltool die erste Spalte, indem ich von der Länge der input Spalte die Länge der neuen Spalte abziehe.

Dann och ein cleansing um ungewünschte whitespaces zu elimineren.

Und zum Schluß noch ein select, um nur die benötigten Spalten weiterzuführen.

Schau es dir einfach mal an.

 

Gruß Matthias

Ellen12345
Atom

Hallo akku,

 

ich probiere es gerne aus, vielen Dank! 

 

Ich habe heute eine andere (Teil-) Lösung gefunden, mit der ich auf den Textteil mit Kommazahl und STK abstelle, da dies in allen anderen Zeilen dieser Spalte gleich ist. Denn in manchen Zeilen dieser Spalte steht leider im Begriff auch noch eine Kommazahl, z. B. 0,3 oder so... das habe ich erst später gesehen. Erschwerend kommt hinzu, dass die Kommazahl in Ausnahmefällen auch noch einen Tausenderpunkt enthalten hat in manchen Zahlen... :-(

 

Ich habe den Ausdruck (.+?)(?:|$) genommen und als Stopp den Begriff (\d+[.]\d+[,]\d{5}\s[S][T][K]|\d+[,]\d{5}\s[S][T][K])

Jetzt erhalte ich eine Spalte mit der Bezeichnung und eine zweite Spalte mit der Kommazahl mit STK. 

 

Jetzt brauche ich "nur" eine Ergänzung, dass mir in der zweiten Spalte nicht nur die Dezimalzahl mit STK ausgegeben wird, sondern der gesamte Rest des Feldes, dann kann ich das Text in Spalten-Tool über das Leerzeichen nutzen...

 

Aber wie gesagt, ich probiere Deine Lösung aus und melde mich wieder.

 

VG Elli

grossal
15 - Aurora
15 - Aurora

Hallo @Ellen12345,

 

willkommen in der deutschen Community :-)

 

Gerne helfe ich dir weiter, probiere es doch mal mit:

(.*?)\s\d+,\d{5} STK (.*)

 

Beispiel:

grossal_0-1679929576518.png

 

Was passiert da?

(.*?) -> Einfach alle Zeichen bis ..

\s\d+,\d{5} STK -> Bis ein Leerzeichen kommt, das von einer beliebig langen Zahl gefolgt ist, welche ein Komma danach hat und nach diesem Komma 5 weitere Zahlen. Dies muss gefolgt werden von einem Leerzeichen,  "STK" und einem weiteren Leerzeichen.

(.*) -> Alles weitere

 

Da der zweite Teil nicht in einer Klammer ist, wird dieser quasi "rausgeschnitten" und wir haben nur den Teil davor (in Spalte 1) und den Teil danach (in Spalte 2).

 

Sollte es nicht klappen, so würde ich mich über ein paar zusätzliche Beispieldaten freuen :-)

 

Viele Grüße

Alex

 

 

 

 

Ellen12345
Atom

Danke vielmals Hallo Alex,

 

ich habe es fast genauso gelöst, mir fehlte bloß das Zeichen für ":... alles was danach kommt"

 

(.*)

 

 Eine Ergänzung zu den Quelldaten muss ich machen - ich musste den Ausdruck 

\s\d+,\d{5} STK

ergänzen um ein ODER, da auch Zahlen mit einem Tausenderpunkt und Komma und 5 Nachkommastellen vorhanden sind.

 

 

Danke vielmals für Deine Hilfe!

 

Viele Grüße, Ellen

grossal
15 - Aurora
15 - Aurora

Aber gerne doch :-)

 

Wenn ein Beitrag für dich hilfreich war, kannst du diesen auch als Lösung markieren, dadurch wird es für andere mit ähnlichen Problemen einfacher den besten Beitrag zu dem Thema zu finden.

 

Zwei Anmerkungen / Fragen zu deinem Regex:

  • STK muss nicht in Klammer gesetzt werden, ebenso könntest du den Punkt ([.]) auch nur mit \. bezeichnen.
  • Ist es denkbar, das neben dem Tausender-Punkt auch einer für Millionen vorkommt? Falls ja, dann könnten wir auch folgenden Ausdruck verwenden:
(.*?)\s(?:\d+\.)*\d+,\d{5} STK (.*)

 

Der Ausdruck (?:\d+\.)* lässt sich wie folgt herunterbrechen:

  • Normalerweise sind () immer dafür da etwas zu markieren/extrahieren, da wir diese aber mit ?: beginnen, signalisieren wir dem Parser, dass diese Information nicht extrahiert werden soll.
  • Danach definieren wir, das eine Zahl von einem Punkt gefolgt werden soll
  • Der Stern am Ende der Klammer markiert, dass dieser Ausdruck null mal oder mehrfach vorkommen kann, so dass er auf allen Variationen funktioniert.

 

grossal_0-1679931421990.png

 

 

Viele Grüße 

Alex

 

 

 

StephV
Alteryx Alumni (Retired)

Hallo @Ellen12345


Vielen Dank für Ihre Frage. Wenn Ihnen die Antwort von @grossaloder @akku geholfen hat, könnten Sie sie als Lösung akzeptieren. Dies wird auch anderen Nutzern helfen.


Vielen Dank!

Steph Vitale-Havreng
Beschriftungen