Определение того, сколько раз подстрока встречается в строке в Python

Я пытаюсь выяснить, сколько раз строка возникает в строке. Например:

nStr = '000123000123' 

Скажем, что строка, которую я хочу найти, – 123. Очевидно, что это происходит дважды в nStr, но мне не удается реализовать эту логику в Python. Что у меня есть на данный момент:

 pattern = '123' count = a = 0 while pattern in nStr[a:]: a = nStr[a:].find(pattern)+1 count += 1 return count 

Ответ, который он должен вернуть, – 2. Я застрял в бесконечном цикле на данный момент.

Мне просто стало известно, что счет – это гораздо лучший способ сделать это, но из любопытства, кто-нибудь видит способ сделать это, как то, что у меня уже есть?

4 Solutions collect form web for “Определение того, сколько раз подстрока встречается в строке в Python”

Использовать str.count :

 >>> nStr = '000123000123' >>> nStr.count('123') 2 

Рабочая версия вашего кода:

 nStr = '000123000123' pattern = '123' count =0 flag=True start=0 while flag: a = nStr.find(pattern,start) # find() returns -1 if the word is not found, #start i the starting index from the search starts(default value is 0) if a==-1: #if pattern not found set flag to False flag=False else: # if word is found increase count and set starting index to a+1 count+=1 start=a+1 print(count) 

Проблема с count() и показанные здесь методы – это случай перекрытия подстрок.

Например: "aaaaaa".count("aaa") возвращает 2

Если вы хотите, чтобы он возвращал 4 [ (aaa)aaa, a(aaa)aa, aa(aaa)a, aaa(aaa) ], вы можете попробовать что-то вроде этого:

 def my_count(string, substring): string_size = len(string) substring_size = len(substring) count = 0 for i in xrange(0,string_size-substring_size+1): if string[i:i+substring_size] == substring: count+=1 return count my_count("aaaaaa", "aaa") # 4 

Не знаю, есть ли лучший способ сделать это, но публиковать только для того, чтобы уточнить способ count() .

 import re pattern = '123' n =re.findall(pattern, string) 

Можно сказать, что подстрока 'pattern' появляется в ln (n) раз в строке.

string.count (подстрока) не полезна в случае перекрытия.

Мой подход:

 def count_substring(string, sub_string): length = len(string) counter = 0 for i in range(length): for j in range(length): if string[i:j+1] == sub_string: counter +=1 return counter 
  • Как удалить '\ x' из шестнадцатеричной строки в Python?
  • Как я могу использовать Python NLTK для определения совпадений между одиночными символами?
  • Java: форматирование строк с помощью заполнителей
  • Преобразовать строки в int или float в python 3?
  • Возвращает элемент DataFrame с использованием частичного совпадения строк в строках pandas python
  • Как я могу нарезать каждый элемент массива numpy строк?
  • Метод Python для удаления итерации
  • Примеры поиска строк в Python
  • Python - лучший язык программирования в мире.