计数字符串中子字符串的重复出现

时间:2013-10-07 14:05:22

标签: python regex string count

假设我有一个像这样的字符串

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

现在我想找出'available'子字符串在此字符串中出现多少次重复。所以在这种情况下,它应该是5,因为''available'将重复出现5次,如果有人可以自己提供python库函数来获取它,那将非常有用,正则表达式解决方案也很受欢迎。

我到目前为止所尝试的是

aa.count('#available')

这显然给了我6,

aa.count('#available#available')

这又是错误的。

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

也错了

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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']