4

このような文字列があるとします

aa = 'booked#booked#available#available#available#available#available#booked#available#booked'

'available'ここで、この文字列に部分文字列が何回繰り返し発生するかを調べたいと思います。したがって、この場合、「使用可能」が 5 回繰り返して来るので 5 になるはずです。誰かがこれを取得するための Python ライブラリ関数自体を提供できると非常に役立ちます。正規表現ソリューションも歓迎します。

私がこれまでに試したことは

aa.count('#available')

明らかに私に6を与えています。

aa.count('#available#available')

これはまた間違っています。

import re
count(re.findall('available#'))

も間違っている

4

2 に答える 2

14

itertoolsの Groupby は、次のタイプの問題に最適です。

from itertools import groupby
aa = 'booked#booked#available#available#available#available#available#booked#available#booked'
words = aa.split('#')
for key, group in groupby(words):
    print len(list(group)), key

出力:

2 booked
5 available
1 booked
1 available
1 booked
于 2013-10-07T14:15:13.310 に答える
1

これが2.7で行った方法です。

import re
aa = 'booked#booked#available#available#available#available#available#booked#available#booked'
len(re.findall('#available', aa))

提供されたパターンに基づいてシャープ記号を安全に削除できると思います。

>>> stuff = re.findall('available', aa)
>>> stuff
['available', 'available', 'available', 'available', 'available', 'available']
于 2013-10-07T14:28:09.307 に答える