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 回答