web-dev-qa-db-ja.com

Python正規表現に基づいて文字列を分割

(Pythonで)"HELLO there HOW are YOU"などの文字列を大文字で分割する最良の方法は何ですか?

したがって、次のような配列になります:results = ['HELLO there', 'HOW are', 'YOU']


編集:

私が試してみました:

p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)

ただし、機能していないようです。

88
user179169

私は提案します

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

このデモを確認してください。

103
Ωmega

先読みを使用できます。

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

これは、単語境界で終わる大文字の文字列が後に続くすべてのスペースで分割されます。

角括弧は読みやすくするためのものであり、省略することもできます。

Wordの最初の文字が大文字で十分な場合(したがって、Helloの前でも分割したい場合)、さらに簡単になります。

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

現在、これはすべてのスペースで分割され、その後に大文字が続きます。

39
Martin Ender

分割する必要はありませんが、むしろfindall:

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

質問には文字列リテラル"\b[A-Z]{2,}\b"が含まれていますが、r修飾子がないため、その\bはバックスペースを意味します。

試してください:r"\b[A-Z]{2,}\b"

0
druid62