it-roy-ru.com

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

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

Word = "dog"
str1 = "the dogs barked"

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

count = str1.count(Word)

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

13
lost9123193

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

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

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

24
Amber

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

Word = "dog"
str = "the dogs barked"
print len(re.findall(Word, str))
3
Aaron

Используйте понимание списка:

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

3
TerryA

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

words = str1.split()

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

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

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

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

count = words.count(Word)
2
Lennart Regebro

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

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

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

lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2
0
Maxx Selva K

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

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. Третье и последнее число случаев.

0
abhay goyan

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

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")
0
roger
    #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
>>> 

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

0
Eng.Boniphace Udoya