Ich habe ein spezielles Format für die Codierung, und ich möchte eine Regex, die die codierte Information extrahiert. Ich habe ':' als Sonderzeichen, das verschiedene 'Informationsblöcke' trennt. Zum Beispiel:Regex-Übereinstimmung, alle Gruppen durch Trennzeichen getrennt?
s = 'P:1:a:3:test_data'
Sollte Split erhalten:
['P','1','a','3','test_data']
kann ich verwenden:
s.split(':')
Allerdings kann ich eine Single ':' als auch codiert werden (es wird niemals mehr als 1 ':' zusammen gruppiert, so dass es keine Zweideutigkeit gibt). So zum Beispiel:
s = 'P:1:::3:test_data'
Sollte geben:
['P','1',':','3','test_data']
Mit split (':') scheitert hier:
['P', '1', '', '', '3', 'test_data']
Was ist der beste Weg, das erfassen ':'? Ich bin nicht sehr stark mit Regexen, ich weiß, Regex-Gruppen können mindestens ein Zeichen mit '* +' übereinstimmen, aber ich bin sehr verwirrt darüber, wie man alles zusammensetzt. Besser noch, gibt es einen besseren Weg, es ohne Regex zu tun? Ich denke, ich kann immer über das Array iterieren, nach fortlaufenden leeren Strings suchen und sie zu ':' kombinieren. Gibt es einen eleganteren Weg?
Dank
Was sollte 'P: 1 ::::: 3: test_data' in aufgeteilt werden? 'P, 1,:,:, 3, test_data' oder' P, 1, :::, 3, test_data'? – Psidom
Sie können Regex mit Gruppe, ich versuchte [diese Regex] (https://regex101.com/r/pKIqak/1) und es funktioniert. –
@Psidom Das wird nie auf der Grundlage der Art von Daten, mit denen ich arbeite, auftreten. Das heißt, 'P, 1,:,:, 3, test_data' ist das korrekte Verhalten. –