it-swarm.com.de

Python auf Regex basierender geteilter String

Was ist der beste Weg, um einen String wie "HELLO there HOW are YOU" durch Großbuchstaben (in Python)?

So würde ich mit einem Array wie dem Folgenden enden: 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.

88
user179169

Ich schlage vor

l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)

Überprüfen Sie diese Demo.

103
Ωmega

Sie könnten einen Lookahead verwenden:

re.split(r'[ ](?=[A-Z]+\b)', input)

Dies wird an jeder Stelle geteilt, an der eine Reihe 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 wird (wenn Sie also auch vor Hello aufteilen möchten), wird es noch einfacher:

re.split(r'[ ](?=[A-Z])', input)

Dies wird nun an jeder Stelle geteilt, gefolgt von einem Großbuchstaben.

39
Martin Ender

Du brauchst kein split, sondern findall:

 re.findall(r'[A-Z]+[^A-Z]*', str)
13
georg

Ihre Frage enthält das Zeichenfolgenliteral "\b[A-Z]{2,}\b", aber das \b bedeutet Rücktaste, da es keinen r-Modifikator gibt.

Versuchen: r"\b[A-Z]{2,}\b".

0
druid62