Поиск вхождения слова в строку в 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