2012-01-14 7 views
1

テキスト内の各単語間のスペースの数を数える簡単な方法を見つけるにはどうすればよいですか?各単語の間のスペースの数

各スペースには、値を表す

例:つのスペースは、文字「」、二つの空間が文字「B」が等である..テキスト

例ですテキスト:

hello all the world 

こんにちは、すべての間に1つのスペース - > ''、全てとの間に2つのスペース - > 'b' が、...

語 - > 'ABC'

+0

'hello all world" helloとall - > 'a'の間に1つのスペース、すべてと - > 'b'、...の間の2つのスペース - 私は最後を理解していませんその例の一部。私は、例文の各単語の間に1つのスペースしか見ることができません。 – birryree

+0

@birryreeソースを見ると、彼は "hello_all__the___world"と入力したようですが、余分なスペースはエディタに表示されません。 – brc

+0

@brc - オハイオ州私はそれを今見ている - JBernardoはそれを編集し、私はマルチモードのスペースモードで動作すると思います。 – birryree

答えて

3
import re 
import string 

''.join(map(lambda x: string.lowercase[len(x) - 1], re.findall(r'\s+', 'hello all the world'))) 
# 'abc' 
+0

非常に良い、ありがとう – Fred

0

私はあなたが右だと仮定すると:

from string import lowercase 

word = lowercase[:text.count(' ')] 
0

あなたが欲しいの出力形式を指定したい場合は、私はこれをより具体的にすることができしかし、これは完全な解決策にあなたを導くはずです。

import re 

word_re = re.compile('(\W*)(\w+)'): 

for match in word_re.finditer(text) 
    spaces, word = match.groups() 
    print len(spaces), word 

注: "単語文字" の略で、\ Wは反対である\w。正確な問題に応じて、より具体的にすることができます。

参考:エンターテイメントとしての価値についてはhttp://docs.python.org/library/re.html#regular-expression-syntax

3

- と私は正規表現を好むが、itertoolsモジュールのように行いませんので - これを行うための別の方法は、あなたが収集するitertools.groupbyを使用できることを知っていますなどの種類によってオブジェクト:

>>> from string import lowercase 
>>> from itertools import groupby 
>>> 
>>> s = 'hello all the world' 
>>> counts = [(len(list(cpart))) for c,cpart in groupby(s) if c == ' '] 
>>> counts 
[1, 2, 3] 
>>> values = [lowercase[count-1] for count in counts] 
>>> values 
['a', 'b', 'c'] 
>>> vs = ''.join(values) 
>>> vs 
'abc' 

itertools.groupbyは、多くの場合、非常に便利です。

+0

あなたの答えは私のものよりも:) – qiao

関連する問題