Was ist der beste Weg, um einen String "HELLO there HOW are YOU"
nach Großbuchstaben zu teilen (in Python)?
Am Ende hätte ich also ein Array wie das folgende: results = ['HELLO there', 'HOW are', 'YOU']
BEARBEITEN:
Ich habe versucht:
p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)
Es scheint jedoch nicht zu funktionieren.
re.split()
?Antworten:
Ich schlage vor
Überprüfen Sie diese Demo .
quelle
re.split(re.split(pattern, string, maxsplit=0, flags=0))
wie in den zuvor zitierten Dokumenten erwähnt.Sie könnten einen Lookahead verwenden:
Dies wird an jeder Stelle aufgeteilt, auf die eine Folge von Großbuchstaben folgt, die in einer Wortgrenze enden.
Beachten Sie, dass die eckigen Klammern nur zur besseren Lesbarkeit dienen und auch weggelassen werden können.
Wenn es ausreicht, dass der erste Buchstabe eines Wortes in Großbuchstaben geschrieben ist (wenn Sie also auch vor teilen möchten
Hello
), wird es noch einfacher:Dies teilt sich nun an jeder Stelle, gefolgt von einem Großbuchstaben.
quelle
re.split(r'[ ](?=[A-Z]+\b)', input)
, damit keine Großbuchstaben gefunden werden? ZB würde es nicht mit "A" übereinstimmen? Ich habe es versuchtre.split(r'[ ](?=[A-Z]{2,}+\b)', input)
. Vielen Dank!I
?re.split(r'[ ](?=[A-Z]{2,}\b)', input)
Sollte es tun.[ ]+
oder vielleicht sogar vorschlagen\W+
, etwas mehr Fälle zu fangen. Trotzdem eine gute Antwort.[ ]
hat bei mir jedoch nicht funktioniert. Stattdessen habe ich verwendet\s
. Der vollständige reguläre Ausdruck, der für mich funktioniert hat, warre.split("\s(?=[A-Z]+\s)", string)
Ihre Frage enthält das String-Literal
"\b[A-Z]{2,}\b"
, aber das\b
bedeutet Rücktaste, da es keinen R-Modifikator gibt.Versuchen Sie :
r"\b[A-Z]{2,}\b"
.quelle