如何查找字符串中单词字符出现的总次数?

时间:2014-06-22 11:26:56

标签: python regex string substring

我是Python的新手,我想在字符串中找到一个子字符串。

例如,如果我有一些常量字母的子字符串,例如:

substring = 'sdkj'

还有一些字母,如:

string = 'sdjskjhdvsnea'

我想制作一个计数器,以便在字符串中找到任何字母SDKJ,计数器将增加1。例如,对于上面的示例,计数器将为8

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

这段代码可以帮到你:

>>> string = 'sdjskjhdvsnea'
>>> substring = 'sdkj'
>>> counter = 0
>>> for x in string:
...     if x in substring:
...         counter += 1


>>> counter
8
>>> 

答案 1 :(得分:1)

修改

当你显然想要计算整个四字符substring的外观时,正则表达式可能是最简单的方法:

>>> import re
>>> string = 'sdkjhsgshfsdkj'
>>> substring = 'sdkj'
>>> len(re.findall(substring, string))
2

re.findall会为您提供substringstring的所有(非重叠)外观列表:

>>> re.findall('sdkj', 'sdkjhsgshfsdkj')
['sdkj', 'sdkj']

通常情况下,"查找子字符串'sdkj'" 意味着尝试找到完整的四字符{{1}的外观} {/ em>在较大的substring内。在这种情况下,您似乎只想要这四个字母的计数总和:

string

或者,更有效率地使用collections.Counter

sum(string.count(c) for c in substring)

这只迭代from collections import Counter counts = Counter(string) sum(counts.get(c, 0) for c in substring) 一次,而不是每string次迭代一次,因此c in substring而不是O(m+n)(其中O(m*n)和{{1} }})。

行动中:

m == len(string)

请注意,您可能希望set(substring)避免重复计算:

n == len(substring)

答案 2 :(得分:1)

使用re.findall()的替代解决方案:

>>> import re
>>> substring = 'sdkj'
>>> string = 'sdjskjhdvsnea'
>>> len(re.findall('|'.join(list(substring)), string))
8