Hier ist der einfachste Weg, dies zu erklären. Folgendes verwende ich:
re.split('\W', 'foo/bar spam\neggs')
-> ['foo', 'bar', 'spam', 'eggs']
Folgendes möchte ich:
someMethod('\W', 'foo/bar spam\neggs')
-> ['foo', '/', 'bar', ' ', 'spam', '\n', 'eggs']
Der Grund ist, dass ich eine Zeichenfolge in Token aufteilen, manipulieren und dann wieder zusammensetzen möchte.
\W
? Ich habe es bei Google nicht geschafft.Antworten:
quelle
['foo', '/bar', ' spam', '\neggs']
?re.split('% ', re.sub('% ', '%% ', '5.000% Additional Whatnot'))
->['5.000%', 'Additional Whatnot']
Wenn Sie auf Newline teilen, verwenden Sie
splitlines(True)
.(Keine allgemeine Lösung, aber hier hinzufügen, falls jemand hierher kommt und nicht merkt, dass diese Methode existiert.)
quelle
Eine weitere No-Regex-Lösung, die unter Python 3 gut funktioniert
quelle
Wenn Sie nur 1 Trennzeichen haben, können Sie Listenverständnisse anwenden:
Trennzeichen anhängen / voranstellen:
Trennzeichen als eigenes Element:
quelle
if x
um sicherzustellen, dass das von produzierte Stücksplit
einen gewissen Inhalt hat, dhresult = [x + sep for x in text.split(sep) if x]
result = [sep+x for x in data.split(sep)]
result[0] = result[0][len(sep):]
Ein weiteres Beispiel: Teilen Sie nicht alphanumerisch und behalten Sie die Trennzeichen bei
Ausgabe:
Erläuterung
quelle
\W
eine kompaktere Möglichkeit ist, sie auszudrücken.Sie können eine Zeichenfolge auch mit einem Array von Zeichenfolgen anstelle eines regulären Ausdrucks wie folgt teilen:
quelle
quelle
Eine faule und einfache Lösung
Angenommen, Ihr Regex-Muster ist
split_pattern = r'(!|\?)'
Zuerst fügen Sie dasselbe Zeichen wie das neue Trennzeichen hinzu, z. B. '[Ausschneiden]'.
new_string = re.sub(split_pattern, '\\1[cut]', your_string)
Dann teilen Sie das neue Trennzeichen,
new_string.split('[cut]')
quelle
[cut]
irgendwo enthalten ist.Wenn Sie eine Zeichenfolge teilen möchten, während die Trennzeichen durch Regex beibehalten werden, ohne eine Gruppe zu erfassen:
Wenn man annimmt, dass Regex in eine Erfassungsgruppe eingepackt ist:
In beiden Fällen werden auch leere Gruppen entfernt, die in den meisten Fällen nutzlos und ärgerlich sind.
quelle
Ich hatte ein ähnliches Problem beim Versuch, einen Dateipfad aufzuteilen, und hatte Mühe, eine einfache Antwort zu finden. Dies funktionierte für mich und beinhaltete nicht, dass Trennzeichen wieder in den geteilten Text eingesetzt werden mussten:
my_path = 'folder1/folder2/folder3/file1'
import re
re.findall('[^/]+/|[^/]+', my_path)
kehrt zurück:
['folder1/', 'folder2/', 'folder3/', 'file1']
quelle
re.findall('[^/]+/?', my_path)
(z. B. das Optionieren des abschließenden Schrägstrichs mithilfe von a,?
anstatt zwei Alternativen|
Ich fand diesen generatorbasierten Ansatz befriedigender:
Es vermeidet die Notwendigkeit, den richtigen regulären Ausdruck herauszufinden, während es theoretisch ziemlich billig sein sollte. Es werden keine neuen Zeichenfolgenobjekte erstellt und der größte Teil der Iterationsarbeit wird an die effiziente Suchmethode delegiert.
... und in Python 3.8 kann es so kurz sein wie:
quelle
Ersetzen Sie alle
seperator: (\W)
durchseperator + new_seperator: (\W;)
geteilt durch die
new_seperator: (;)
quelle
Hier ist eine einfache
.split
Lösung, die ohne Regex funktioniert.Dies ist eine Antwort für Python split (), ohne das Trennzeichen zu entfernen , also nicht genau das, was der ursprüngliche Beitrag verlangt, aber die andere Frage wurde als Duplikat für diesen geschlossen.
Zufallstests:
quelle