2017-09-14 3 views
3

lässt sagen, ich habe eine Zeichenfolge.Split String Python mit wechselnden Indikator

a = '[email protected]@@@@@a2&&&&&&a3::::' 

es natürlich spaltet durch: a1, a2 und a3 zu

['!!!!!!','@@@@@@','&&&&&&','::::'] 

ich die split Funktion verwenden möchten, so etwas wie:

>>> a.split('a*') 

Die * zeigt an, dass es doesn‘ egal welcher Charakter kommt nach a. Gibt es einen sofortigen Weg, dies zu tun?

+0

Mögliches Duplikat von [Python: Teilen nach bestimmten Mustern] (https://StackOverflow.com/questions/14814186/python-splitting-by-certain-pattern) –

+0

Ist es wirklich irgendein Zeichen nach 'a' oder nur digit ? – Toto

Antwort

0

von Regex, mit Modul re, können Sie wie folgt versuchen:

import re 
a = re.split(r'a\d','[email protected]@@@@@a2&&&&&&a3::::') 

Wenn Sie in Ihre Split-Tasten um genauer zu sein, versuchen Sie dies:

a = re.split(r'a1|a2|a3','[email protected]@@@@@a2&&&&&&a3::::') 

und machen Sie Ihre individuelle Kondition, wie Sie es wünschen.

0

zwar nicht so effizient wie @ Menglong-Lösung, könnten Sie tun es technisch mit nur Liste und String-Operationen, ohne re zu importieren:

>>> a = '[email protected]@@@@@a2&&&&&&a3::::' 
>>> s = a.split('a') 
>>> s[:1] + [x[1:] for x in s[1:] if x] 
['!!!!!!', '@@@@@@', '&&&&&&', '::::'] 

Dies funktioniert, weil, wenn Sie aufgespalten auf 'a', das erste Zeichen jeder Segment nach dem ersten wird der * Charakter sein, den Sie loswerden wollen.

Diese Lösung ist nicht vorzuziehen, nur etwas, was ich als Übung getan habe.