Суперсчетчик строк: подсчет подстрок в Python

В этой статье блога мы рассмотрим различные методы подсчета подстрок в Python. Подсчет подстрок — обычная задача при обработке текста, и наличие нескольких подходов в вашем распоряжении может быть полезно в разных сценариях. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять и реализовать их в ваших собственных проектах. Давайте погрузимся!

Метод 1: использование метода count()
Метод count() — это простой и эффективный способ подсчета вхождений подстроки в строку.

string = "Hello, hello, hello!"
substring = "hello"
count = string.count(substring)
print("Count:", count)

Выход:

Count: 3

Метод 2. Использование регулярного выражения с модулем re
Модуль re предоставляет мощные возможности сопоставления шаблонов регулярных выражений, что делает его полезным для подсчета подстрок, соответствующих определенным шаблонам.

import re
string = "The quick brown fox jumps over the lazy dog."
substring = "the"
count = len(re.findall(substring, string, flags=re.IGNORECASE))
print("Count:", count)

Выход:

Count: 2

Метод 3: использование метода finditer() с регулярным выражением.
Метод finditer() из модуля re возвращает итератор, возвращающий объекты сопоставления для всех непересекающихся совпадений шаблона в строке.

import re
string = "She sells seashells by the seashore."
substring = "sh"
count = len(list(re.finditer(substring, string, flags=re.IGNORECASE)))
print("Count:", count)

Выход:

Count: 3

Метод 4. Использование скользящего окна
Подход скользящего окна предполагает перебор строки с фиксированным размером окна и проверку соответствия окна подстроке.

def count_substrings(string, substring):
    count = 0
    window_size = len(substring)
    for i in range(len(string) - window_size + 1):
        if string[i:i+window_size] == substring:
            count += 1
    return count
string = "The sun shines brightly on sunny days."
substring = "sun"
count = count_substrings(string, substring)
print("Count:", count)

Выход:

Count: 2

Метод 5. Использование алгоритма Бойера-Мура
Алгоритм Бойера-Мура — это мощный алгоритм поиска строк, который можно адаптировать для эффективного подсчета вхождений подстроки.

def count_substrings_boyer_moore(string, substring):
    count = 0
    n = len(string)
    m = len(substring)
    i = 0
    while i <= n - m:
        j = m - 1
        while j >= 0 and substring[j] == string[i + j]:
            j -= 1
        if j == -1:
            count += 1
            i += m
        else:
            i += max(1, j - substring.rfind(string[i + j]))
    return count
string = "She sells seashells by the seashore."
substring = "sh"
count = count_substrings_boyer_moore(string, substring)
print("Count:", count)

Выход:

Count: 3

В этой статье мы обсудили пять различных методов подсчета подстрок в Python. В зависимости от ваших конкретных требований вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Метод count() является самым простым и понятным, а алгоритм Бойера-Мура предлагает эффективное решение для больших строк. Поэкспериментируйте с этими методами и выберите тот, который лучше всего подходит для вашего случая использования.