在python 3中查找字符串中单词的出现次数

los*_*193 14 python string count match

我正在尝试查找字符串中单词的出现次数.

word = "dog"
str1 = "the dogs barked"
Run Code Online (Sandbox Code Playgroud)

我使用以下内容来计算出现次数:

count = str1.count(word)
Run Code Online (Sandbox Code Playgroud)

问题是我想要完全匹配.所以这句话的计数是0.这可能吗?

Amb*_*ber 29

如果你想提高效率:

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

这不需要创建任何中间列表(不像split()),因此可以有效地处理大input_string值.

它还具有正确使用标点符号的好处 - 它将正确地返回1作为短语的计数"Mike saw a dog."(而无论是否无论是否split()).它使用\b正则表达式标志,它与单词边界匹配(\waka [a-zA-Z0-9_]和其他任何东西之间的过渡).

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

  • @lost9123193 - `_` 只是一个虚拟变量,是一种表达“我实际上并不关心这里的值”的方式。在本例中,我使用它是因为我们总是对计数求和“1”;我们实际上并不关心从 `re.finditer()` 返回的匹配对象。 (2认同)

grc*_*grc 9

您可以使用str.split()将句子转换为单词列表:

a = 'the dogs barked'.split()
Run Code Online (Sandbox Code Playgroud)

这将创建列表:

['the', 'dogs', 'barked']
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用list.count()以下方法计算确切事件的数量:

a.count('dog')  # 0
a.count('dogs') # 1
Run Code Online (Sandbox Code Playgroud)

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

import re
a = re.split(r'\W', 'the dogs barked.')
a.count('dogs') # 1
Run Code Online (Sandbox Code Playgroud)


Ter*_*ryA 5

使用列表理解:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

  • 你的 `sum()` 实现只是列表中已经存在的 `count()` 方法的低效重新实现。改用`.count(word)`。 (2认同)

小智 5

import re

word = "dog"
str = "the dogs barked"
print len(re.findall(word, str))
Run Code Online (Sandbox Code Playgroud)