Я знаю, что могу найти слово в строке с
if word in my_string:
Но я хочу найти все «слово» в строке, как это.
counter = 0
while True:
if word in my_string:
counter += 1
Как я могу сделать это, не считая одно и то же слово снова и снова?
4 ответа
Если вы хотите убедиться, что он считает полное слово, например, is
будет иметь только одно слово в this is
, даже если в this
есть is
, вы можете разделить, отфильтровать и считать:
>>> s = 'this is a sentences that has is and is and is (4)'
>>> word = 'is'
>>> counter = len([x for x in s.split() if x == word])
>>> counter
4
Однако, если вы просто хотите сосчитать все вхождения подстроки, то есть is
также будет соответствовать is in this
, тогда:
>>> s = 'is this is'
>>> counter = len(s.split(word))-1
>>> counter
3
Другими словами, split
строка в каждом вхождении слова, затем минус один, чтобы получить счетчик.
Редактировать - просто использовать счет:
Это был долгий день, поэтому я полностью забыл, но у str
есть встроенный метод для этого str.count(substring)
, который делает то же самое, что и мой второй ответ, но гораздо более читабелен. Пожалуйста, подумайте об использовании этого метода (и посмотрите на ответы других людей, как это сделать)
Используйте аргумент beg
для метода .find
.
counter = 0
search_pos = 0
while True:
found = my_string.find(word, search_pos)
if found != -1: # find returns -1 when it's not found
#update counter and move search_pos to look for the next word
search_pos = found + len(word)
counter += 1
else:
#the word wasn't found
break
Это своего рода решение общего назначения. В частности, для подсчета в строке вы можете просто использовать my_string.count(word)
Строка уже имеет ту функциональность, которую вы ищете. Вам просто нужно использовать str.count(item)
например.
РЕДАКТИРОВАТЬ: Это будет искать все вхождения указанной строки, включая части слов.
string_to_search = 'apple apple orange banana grapefruit apple banana'
number_of_apples = string_to_search.count('apple')
number_of_bananas = string_to_search.count('banana')
Следующее будет искать только полные слова, просто разбить строку, которую вы хотите найти.
string_to_search = 'apple apple orange banana grapefruit apple banana'.split()
number_of_apples = string_to_search.count('apple')
number_of_bananas = string_to_search.count('banana')
Используйте регулярные выражения:
import re
word = 'test'
my_string = 'this is a test and more test and a test'
# Use escape in case your search word contains periods or symbols that are used in regular expressions.
re_word = re.escape(word)
# re.findall returns a list of matches
matches = re.findall(re_word, my_string)
# matches = ['test', 'test', 'test']
print len(matches) # 3
Имейте в виду, что это поймает другие слова, содержащие ваше слово, такие как testing
. Вы можете изменить свое регулярное выражение, чтобы оно точно соответствовало вашему слову
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.