2012-11-03 32 views
47

"HELLO there HOW are YOU"のような文字列を大文字の単語(Python)で分割する最も良い方法は何ですか?正規表現に基づくPython分割文字列

は、だから私は、そのようなのような配列で終わるだろう:results = ['HELLO there', 'HOW are', 'YOU']


編集:私は試してみました

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

動作するようには思えない、しかし。

+2

[何を試しましたか](http://www.whathaveyoutried.com)? - ['' re.split() ''](http://docs.python.org/3/library/re.html#re.split)が見つかりませんでしたか? –

+1

何かがうまくいかないと言ったら、理由を説明してください。例外はありますか? (もしそうなら、全体の例外を投稿する)間違った出力を得ますか? –

答えて

55

私は

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

チェックthis demoを示唆しています。

7

あなたは、分割を必要とするのではなく、findAllのいない:これは、大文字の文字列が続いているすべてのスペースで分割されます

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

:あなたが先読みを使用することができ

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

大文字ではなく連続した大文字で分割する –

+2

@ m.buettner:「単語」の意味がわかりません。 – georg

+0

彼の例を見てください。完全に大文字の単語。そして私は、(正規表現)単語境界の間にあるものとして、言葉を取るだろう。あなたのものは 'someThing'を' some'と 'Thing'の間に分割します –

25

を単語境界で終わる大文字の手紙。

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

、それがさらに簡単になります(あなたにもHelloの前で分割したいと思うので、もし)単語の最初の文字が大文字であることを十分にある場合:

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

さて、これは、すべての分割スペースに続いて大文字が続きます。

+1

どうすれば 're.split(r '[ ](?= [AZ] + \ b) '、input) '大文字が見つかりませんでしたか?例えば。それは "A"と一致しませんか?私はre.split(r '[](?= [A-Z] {2、} + \ b)'、入力) 'を試しました。ありがとう! –

+0

@JamesEggers「I」のような単語で分割しないように、少なくとも2つの大文字を必要とすることを意味しますか? 're.split(r '[](?= [A-Z] {2、} \ b)'、入力)'それを行う必要があります。 –

+2

私は、少なくとも[[] + 'またはおそらく' \ W + 'を示唆して、少しだけもっと多くのケースをキャッチします。それでも、良い答えです。 – georg

関連する問題