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

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

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

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

count = str1.count(word)

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

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

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

Ответ 2

Вы можете использовать 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

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

Ответ 4

import re

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

Ответ 5

Вам нужно разделить предложение на слова. Для примера вы можете сделать это только с помощью

words = str1.split()

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

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

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

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

count = words.count(word)

Ответ 6

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

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. Третье и последнее - количество вхождений.

Ответ 7

Рассмотрим пример s = "suvotisuvojitsuvo". Если вы хотите подсчитать количество отдельных счетчиков "suvo" и "suvojit", то вы используете метод count()... count different ie), вы не считаете suvojit для suvo.. только считаете одиноким "suvo".

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

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

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

Ответ 8

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

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")

Ответ 9

    #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
>>> 

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

Ответ 10

Если вам не нужно регулярное выражение, то вы можете сделать этот аккуратный трюк.

word = " is " #Add space at trailing and leading sides.
input_string = "This is some random text and this is str which is mutable"
print("Word count : ",input_string.count(word))
Output -- Word count :  3