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和/或正则表达式的语言环境标志就足够了.
您可以使用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)
使用列表理解:
>>> 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()返回一个句子中所有单词的列表。然后我们使用列表理解来计算单词在句子中出现的次数。
小智 5
import re
word = "dog"
str = "the dogs barked"
print len(re.findall(word, str))
Run Code Online (Sandbox Code Playgroud)