String mit regex zerlegen
-
Hallo Gemeinde,
ich versuche schon den ganzen Abend den folgenden String mit regex zu zerlegen.
30CF05!381TRACK_1:MOLCH.BI0001 30CF05!381TRACK_1:MOLCHCA0.BO01std::string line; std::smatch match; std::regex rex("(\\w)+"); std::regex_match(line, match, rex); std::string s1 = match.str();Wie müßte rex den aussehen, damit ich in match
30CF05 381TRACK_1 MOLCH.BI0001 30CF05381TRACK_1 MOLCHCA0.BO01finde. Irgendwie stelle ich mich gerade ein wenig prasselig an.
-
Ist deine Aufteilung fehlerhaft, oder was genau soll die Regel sein?
-
Nunja ich habe eine Datei in der die Zeilen so aufgebaut sind wie im Beispiel.
Nun brauche ich je Zeile die 6 Teilstrings die durch "!: " getrennt sind. Normal würde ich dass durch strtok erledigen, dachte aber regex könnte das schneller/eleganter.
-
andreasgeorg schrieb:
Nun brauche ich je Zeile die 6 Teilstrings die durch "!: " getrennt sind.
Und wie ist "30CF05381TRACK_1" zustande gekommen?
-
Arcoth schrieb:
Und wie ist "30CF05381TRACK_1" zustande gekommen?
Schlamperei beim Erstellen der Frage
. Mea culpa.Hätte natürlich so
30CF05 381TRACK_1 MOLCH.BI0001 30CF05 381TRACK_1 MOLCHCA0.BO01aussehen müssen.
-
warum nicht einfach nach !, : und Blank zerlegen?
ist ein Regex-Splitter nicht ein wenig zu viel Power für so wenig Bedarf?
Oder willst du auch validieren - dafür reichen die Informationen die du gegeben hast aber auch nicht aus
-
Unabhängig davon, dass ich Gast3 recht gebe, dass hier ein einfaches Splitten auch reicht:
Wie wäre es beispielsweise mit
([A-Z0-9]+)!([A-Z0-9_]+):([A-Z0-9\.]+)\s+([A-Z0-9]+)!([A-Z0-9_]+):([A-Z0-9\.]+)Der Teil vor und nach
\s+ist identisch:
([A-Z0-9]+)!([A-Z0-9_]+):([A-Z0-9\.]+)
-
Danke für die Hilfe und die Kommentare.
Nein, es geht nur um das einfache Zerlegen. Ich habe eine Datei mit ca. 500MB wo jede Zeile die beschriebene Struktur hat. Mir ist durchaus bewußt, dass ein Tokenizer für die Aufgabe völlig ausreicht.
Da ich aber noch nie mit regex gearbeitet habe, wollte ich einfach mal sehen wie das funktioniert. Und zugegebener Maßen bin ich etwas erschlagen von den "Filterausdrücken".
-
andreasgeorg schrieb:
Und zugegebener Maßen bin ich etwas erschlagen von den "Filterausdrücken".
Es ist wie mit vielem: Wenn du weißt, welche Zeichen in der Regex welche Bedeutung haben was bedeuten, wirst du feststellen, dass diese Regex sehr simpel ist.