Поиск вхождений слова в строке в python 3

Я пытаюсь найти количество вхождений слова в строку.

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

я использовал следующее Для подсчета вхождений:

count = str1.count(word)

проблема в том, что я хочу точное совпадение. Таким образом, количество для этого предложения будет равно 0. Это возможно?

9 ответов


если вы собираетесь на эффективность:

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() не будет). Он использует \b regex флаг, который соответствует на границах слов (переходы между \w а.к.а [a-zA-Z0-9_] и все остальное).

Если вам нужно беспокоиться о языках за пределами набора символов ASCII, вам может потребоваться настроить регулярное выражение для правильного соответствия не-словесным символам на этих языках, но для многих приложений это было бы чрезмерным усложнением, и во многих других случаях достаточно установить флаги unicode и/или locale для регулярного выражения.


можно использовать str.split() чтобы преобразовать предложение в список слов:

a = 'the dogs barked'.split()

это создаст список:

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

затем вы можете подсчитать количество точных вхождений, используя list.count():

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

если он должен работать с пунктуацией, вы можете использовать регулярные выражения. Например:

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

использовать список понимание:

>>> 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() возвращает список всех слов в предложении. Затем мы используем понимание списка, чтобы подсчитать, сколько раз слово появляется в предложении.


вам нужно разделить предложение на слова. Например, вы можете сделать это с помощью just

words = str1.split()

но для реального использования слова, вам нужно нечто более продвинутое, которое также обрабатывает препинания. Для большинства западных языков вы можете уйти с заменой всех знаков препинания пробелами, прежде чем делать str1.split().

Это будет работать и для английского языка в простых случаях, но обратите внимание, что "я" будет разделено на два слова:" I "и" m", и оно должно быть разделено на " I " и "ам." Но это может быть излишним для этого приложения.

для других случаев, таких как Азиатский язык или фактическое использование английского языка в реальном мире, вы можете использовать библиотеку, которая делает разделение слов для вас.

тогда у вас есть список слов, и вы можете сделать

count = words.count(word)

import re

word = "dog"
str = "the dogs barked"
print len(re.findall(word, str))

Ниже приведен простой пример, где мы можем заменить желаемое слово новым словом, а также для желаемого количества вхождений:

import string

def censor(text, word):<br>
    newString = text.replace(word,"+" * len(word),text.count(word))
    print newString

print censor("hey hey hey","hey")

результат должен выглядеть так : +++ +++ +++

первый параметр в функции search_string. Второй-new_string, который заменит вашу search_string. Третье и последнее-количество происшествий .


рассмотрим пример s = "suvotisuvojitsuvo". Если вы хотите не считать различных count "suvo" и "suvojit", то вы используете метод count ()... граф отчетливый i.д) Вы не считаете сувожит до Суво.. только сосчитать одиноких "Суво".

suvocount = s.count("suvo") // #output: 3
suvojitcount = s.count("suvojit") //# output : 1

затем найдите одинокий счет Суво, который вы должны отрицать от suvojit count.

lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2

Это было бы моим решением с помощью комментариев:

word = str(input("type the french word chiens in english:"))
str1 = "dogs"
times = int(str1.count(word))
if times >= 1:
    print ("dogs is correct")
else:
    print ("your wrong")

    #counting the number of words in the text
def count_word(text,word):
    """
    Function that takes the text and split it into word
    and counts the number of occurence of that word
    input: text and word
    output: number of times the word appears
    """
    answer = text.split(" ")
    count = 0
    for occurence in answer:
        if word == occurence:
            count = count + 1
    return count

sentence = "To be a programmer you need to have a sharp thinking brain"
word_count = "a"
print(sentence.split(" "))
print(count_word(sentence,word_count))

#output
>>> %Run test.py
['To', 'be', 'a', 'programmer', 'you', 'need', 'to', 'have', 'a', 'sharp', 'thinking', 'brain']
2
>>> 

создайте функцию, которая принимает два входа, которые являются предложением текста и слова. Разделить текст предложения на сегмент слов в списке, Затем проверьте, существует ли подсчитываемое слово в сегментированных словах и подсчитайте вхождение как возврат функции.