在Python 3中找到字符串中一个词的出现次数

2024-04-24 10:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出一个单词在字符串中出现的次数。

word = "dog"
str1 = "the dogs barked"

我使用以下方法来计算发生的次数:

count = str1.count(word)

问题是我想要一个完全匹配的。所以这个句子的计数是0。 有可能吗?


Tags: the方法字符串count单词次数句子word
3条回答

使用列表理解:

>>> word = "dog"
>>> str1 = "the dogs barked"
>>> sum(i == word for word in str1.split())
0

>>> word = 'dog'
>>> str1 = 'the dog barked'
>>> sum(i == word for word in str1.split())
1

split()返回一个句子中所有单词的列表。然后我们使用列表理解来计算单词在一个句子中出现的次数。

可以使用^{}将句子转换为单词列表:

a = 'the dogs barked'.split()

这将创建列表:

['the', 'dogs', 'barked']

然后,您可以使用^{}计算精确出现的次数:

a.count('dog')  # 0
a.count('dogs') # 1

如果需要使用标点符号,可以使用正则表达式。例如:

import re
a = re.split(r'\W', 'the dogs barked.')
a.count('dogs') # 1

如果你想提高效率:

import re
count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string))

这不需要创建任何中间列表(与split()不同),因此对于较大的input_string值有效。

它还有正确使用标点符号的好处——它将正确返回1作为短语"Mike saw a dog."的计数(而无参数split()则不会)。它使用\bregex标志,它在单词边界上匹配(在\wa.k.a[a-zA-Z0-9_]和其他任何东西之间的转换)。

如果需要担心ASCII字符集以外的语言,可能需要调整regex以正确匹配这些语言中的非单词字符,但对于许多应用程序,这将是一个过度复杂的过程,在许多其他情况下,为regex设置unicode和/或locale标志就足够了。

相关问题 更多 >