Was ist die pythonische Methode, um eine Zeichenfolge vor dem Auftreten eines bestimmten Zeichensatzes zu teilen?
Zum Beispiel möchte ich 'TheLongAndWindingRoad'
bei jedem Auftreten eines Großbuchstaben (möglicherweise mit Ausnahme des ersten) aufteilen
und erhalten
['The', 'Long', 'And', 'Winding', 'Road']
.
Bearbeiten: Es sollte auch einzelne Vorkommen aufteilen, dh von denen 'ABC'
ich erhalten möchte
['A', 'B', 'C']
.
'[a-zA-Z][^A-Z]*'
als regulären Ausdruck .print(re.findall('^[a-z]+|[A-Z][^A-Z]*', 'theLongAndWindingRoad'))
Hier ist eine alternative Regex-Lösung. Das Problem kann wie folgt wiederholt werden: "Wie füge ich vor jedem Großbuchstaben ein Leerzeichen ein, bevor ich die Teilung durchführe?"
Dies hat den Vorteil, dass alle Nicht-Leerzeichen beibehalten werden, was bei den meisten anderen Lösungen nicht der Fall ist.
quelle
Wenn Sie
"It'sATest"
teilen möchten ,["It's", 'A', 'Test']
um das Rexeg in zu ändern"[A-Z][a-z']*"
quelle
drops
alle regulären (nur einfachen Alpha) Wörter, die nicht mit einem Großbuchstaben beginnen. Ich bezweifle, dass dies die Absicht des OP war.Eine Variation der Lösung von @ChristopheD
quelle
Verwenden Sie einen Lookahead:
In Python 3.7 können Sie Folgendes tun:
Und es ergibt:
quelle
oder
quelle
[s for s in re.compile(r"([A-Z][^A-Z]*)").split( "TheLongAndWindingRoad") if s]
Geben['The', 'Long', 'And', 'Winding', 'Road']
filter
dem Listenverständnis mit einer Bedingung. Hast du etwas dagegen?filter(lambdaconditionfunc, ...)
b) in Python 3filter()
gibt einen Iterator zurück. Sie werden also nicht völlig gleichwertig sein. c) Ichfilter()
quelle
Ich denke, dass eine bessere Antwort darin bestehen könnte , die Zeichenfolge in Wörter aufzuteilen, die nicht in einem Großbuchstaben enden. Dies würde den Fall behandeln, in dem die Zeichenfolge nicht mit einem Großbuchstaben beginnt.
Beispiel:
quelle
Alternative Lösung (wenn Sie explizite reguläre Ausdrücke nicht mögen):
quelle
Eine andere ohne Regex und die Fähigkeit, zusammenhängende Großbuchstaben beizubehalten, wenn dies gewünscht wird
quelle
Dies ist mit dem
more_itertools.split_before
Tool möglich.more_itertools
ist ein Paket von Drittanbietern mit mehr als 60 nützlichen Tools, einschließlich Implementierungen für alle ursprünglichen itertools-Rezepte , wodurch deren manuelle Implementierung entfällt.quelle
Ein alternativer Weg ohne Verwendung von Regex oder Aufzählung:
Ich denke, es ist klarer und einfacher, ohne zu viele Methoden zu verketten oder ein langes Listenverständnis zu verwenden, das schwer zu lesen sein kann.
quelle
Ein alternativer Weg mit
enumerate
undisupper()
Code:
Ausgabe:
quelle
Teilen, was mir beim Lesen des Beitrags in den Sinn kam. Anders als andere Beiträge.
quelle
Der pythonische Weg könnte sein:
Funktioniert gut für Unicode und vermeidet re / re2.
quelle
Ersetzen Sie jeden Großbuchstaben 'L' in der angegebenen durch ein Leerzeichen plus den Buchstaben "L". Wir können dies mithilfe des Listenverständnisses tun oder eine Funktion definieren, um dies wie folgt zu tun.
Wenn Sie sich für eine Funktion entscheiden, gehen Sie wie folgt vor.
Im Fall des angegebenen Beispiels:
Die meiste Zeit, in der wir einen Satz in Großbuchstaben aufteilen, ist es jedoch normalerweise so, dass wir Abkürzungen beibehalten möchten, die normalerweise ein kontinuierlicher Strom von Großbuchstaben sind. Der folgende Code würde helfen.
Vielen Dank.
quelle