2017-08-22 10 views
0

マイラインをオカレンスです:発見数は

line = "aaaaaaaaaaaaaaxxxxxxxxxxxxxxbbbbbbbbbbbbxxxxxxxxxxxxxxxxxxxbbbbbbbbbbb" 

どのように私はlineに「XXXXX」のパッチの数を見つけることができますか?例えば上記の答えは2です。

'x'sの数は異なる場合があります。

+0

あなたは何を試しましたか? – Harsha

+0

私はs.find( 'x')とs.rfind( 'x')を試しましたが、結果が得られません。私の行に – ana

+0

があります。少なくとも3つあります。 – ana

答えて

1

あなたがグループにそれぞれ「パッチ」をgroupbyを使用して、occurancesの数をカウントすることができます

from itertools import groupby 

line = 'aaaaaaaaaaaaaaxxxxxxxxxxxxxxbbbbbbbbbbbbxxxxxxxxxxxxxxxxxxxbbbbbbbbbbb' 
number_of_x = sum(ch == 'x' for ch, _ in groupby(line)) 
+0

これは本当に美しいです! –

+0

ありがとうございました。それは完全に動作します。私はこのようなコードをいつ書くことができるのだろうかと思います。 – ana

3

これは、正規表現は非常に便利ですどこの良い例です。私は世界最高の正規表現ではないんだけど、ここで働くの抜粋です:

import re 

line = "aaaaaaaaaaaaaaxxxxxxxxxxxxxxbbbbbbbbbbbbxxxxxxxxxxxxxxxxxxxbbbbbbbbbbb" 
patches = len(re.findall(r"(x+)", line)) 

これは、どんなに長い1以上の「X」のいずれかのグループにマッチしないことによって動作しますが。

+0

これは、もう1つのソリューションです。 Thanx – ana

+0

どのようにこのようなパッチの開始と終了のインデックスを取得できますか? – ana

+0

あなたの探していることを行う質問[ここ](https://stackoverflow.com/questions/3519565/find-the-indexes-of-all-regex-matches-in-python) – bendl