Проверка наличия подстроки в строке на Python - полный разбор приёмов

Раздел: Строки -> Строки

Проверка наличия подстроки в строке Python

Наиболее простой и эффективный способ проверки вхождения подстроки в строку в Python - оператор in. Он возвращает True, если подстрока найдена, и False в противном случае. Оператор работает быстро, так как реализован на уровне C и использует оптимизированный алгоритм поиска.


text = "Программирование на Python - увлекательный процесс"
sub = "Python"
print(sub in text)  # True
sub2 = "Java"
print(sub2 in text) # False

Python strip (метод strip в python)

Возможные ошибки: оператор in чувствителен к регистру. Если необходимо игнорировать регистр, следует предварительно привести обе строки к одному регистру, например, с помощью метода .lower() или .casefold(). Также оператор работает только для строк; для проверки вхождения в другие последовательности (списки, кортежи) он тоже подходит, но в рамках статьи речь идёт о строках.

Как проверить вхождение подстроки с получением индекса?

Метод str.find() возвращает индекс первого вхождения подстроки или -1, если подстрока не найдена. Это удобно, когда нужна позиция начала подстроки.


text = "Python позволяет писать чистый код"
index = text.find("чистый")
print(index)  # 23
index_miss = text.find("грязный")
print(index_miss)  # -1

Python повторить строку (повторение строки в python)

Типичная ошибка: начинающие разработчики иногда путают возвращаемое значение -1 со значением 0 (когда подстрока находится в начале строки). Рекомендуется всегда проверять результат: if text.find(sub) != -1.

Как найти подстроку, но получить исключение при её отсутствии?

Метод str.index() работает аналогично find(), но если подстрока не найдена, вызывается исключение ValueError. Это может быть полезно, когда отсутствие подстроки считается ошибкой.


text = "Исключения - это часть языка"
try:
    pos = text.index("часть")
    print(f"Подстрока найдена на позиции {pos}")
except ValueError:
    print("Подстрока не найдена")

Tuple в str python (преобразование кортежа в строку в python)

Если не обработать исключение, программа аварийно завершится. Поэтому метод index() следует использовать только тогда, когда отсутствие подстроки - недопустимая ситуация.

Как подсчитать количество вхождений подстроки?

Метод str.count() возвращает число непересекающихся вхождений подстроки. Если результат равен нулю, подстрока отсутствует.


text = "рекурсия рекурсия рекурсия"
count = text.count("рекурсия")
print(count)  # 3
count_none = text.count("итерация")
print(count_none)  # 0

Python объект в строку (преобразование объекта в строку в python)

Как проверить вхождение с помощью регулярных выражений?

Модуль re предоставляет функцию re.search(), которая ищет совпадение с шаблоном. Возвращает объект совпадения или None. Позволяет гибко настраивать поиск (регистр, метасимволы).


import re
text = "Цена: 1000 рублей"
pattern = r"\d+"
match = re.search(pattern, text)
if match:
    print(f"Найдено число: {match.group()}")
else:
    print("Число не найдено")

Python convert string (преобразование строк в python)

Типичная ошибка: забыть экранировать метасимволы (точку, звёздочку) в шаблоне, что приведёт к неожиданным совпадениям. Также регулярные выражения работают медленнее простого in и используются только при необходимости.

Как проверить начало или конец строки на совпадение с подстрокой?

Методы str.startswith() и str.endswith() проверяют, начинается или заканчивается ли строка заданной подстрокой. Это частные случаи проверки вхождения.


url = "https://example.com"
print(url.startswith("https"))  # True
print(url.endswith(".com"))     # True

Python str to bytes (преобразование строки в байты в python)

Как реализовать собственную проверку с помощью __contains__?

Класс str реализует специальный метод __contains__, который вызывается оператором in. Его можно переопределить в пользовательских классах для кастомного поведения.


class MyString:
    def __init__(self, s):
        self.s = s
    def __contains__(self, item):
        return item.lower() in self.s.lower()

text = MyString("Python")
print("python" in text)  # True

функция разделить python (разделение строки на список в python)

Как проверить наличие одной из нескольких подстрок?

Функция any() в сочетании с генератором списка позволяет проверить, содержит ли строка хотя бы одну из подстрок.


text = "Мне нравится программировать на Python"
substrings = ["Java", "Python", "C++"]
result = any(sub in text for sub in substrings)
print(result)  # True
- вывести элемент строки python (вывод конкретного символа строки по индексу в python)
- задания на строки python (задания на строки в python)
- замена символов python (замена символов в строке python)

Расширенные примеры проверки вхождения подстроки

Ниже приведены примеры, которые решают специфические задачи, встречающиеся на практике.

Регистронезависимая проверка с casefold

Пример

text = "Python - язык программирования"
search = "питон"  # нет точного совпадения
# Используем casefold() для корректной обработки символов Юникода
result = search.casefold() in text.casefold()
print(result)  # False, потому что 'питон' не совпадает с 'Python'
# Но если искать 'py', то True
print("py".casefold() in text.casefold())  # True
False
True

Проверка наличия любой подстроки из списка с игнорированием регистра

Пример

text = "Сегодня солнечная погода, температура +22"
ignore_case = True
keywords = ["солнеч", "дождлив", "облачн"]
if ignore_case:
    found = any(kw.lower() in text.lower() for kw in keywords)
else:
    found = any(kw in text for kw in keywords)
print(found)  # True ("Солнечная" содержит "солнеч")
True

Проверка вхождения с учётом границ слов (использование регулярного выражения)

Пример

import re
text = "В книге слово 'cat', но не 'catalog'"
# Найдём 'cat' как целое слово
pattern = r"\bcat\b"
match = re.search(pattern, text)
if match:
    print(f"Найдено: {match.group()}")  # cat
else:
    print("Не найдено")
Найдено: cat

Поиск подстроки в байтовых строках (bytes/bytearray)

Пример

data = b"\x48\x65\x6c\x6c\x6f"  # 'Hello'
sub = b"ell"
print(sub in data)          # True
print(data.find(sub))       # 1
# Для bytearray
ba = bytearray(data)
print(sub in ba)            # True
True
1
True

Проверка вхождения в pandas DataFrame (строковые столбцы)

Пример

import pandas as pd
df = pd.DataFrame({
    "name": ["Alice", "Bob", "Charlie"],
    "email": ["alice@example.com", "bob@test.org", "charlie@mail.com"]
})
# Проверка, содержит ли email подстроку "example"
df["is_example"] = df["email"].str.contains("example", na=False)
print(df)
      name              email  is_example
0    Alice  alice@example.com        True
1      Bob      bob@test.org       False
2  Charlie   charlie@mail.com       False

Проверка в нескольких строках из списка с частичным совпадением

Пример

phrases = ["код на Python", "отладка кода", "рефакторинг"]
search = "код"
results = [search in phrase for phrase in phrases]
print(results)  # [True, True, False]
# Отфильтровать строки, содержащие подстроку
filtered = [phrase for phrase in phrases if search in phrase]
print(filtered)  # ['код на Python', 'отладка кода']
[True, True, False]
['код на Python', 'отладка кода']

Поиск подстроки с игнорированием пунктуации

Пример

import string
text = "Привет, Мир!"
search = "мир"
# Удалим пунктуацию и приведём к нижнему регистру
clean_text = text.translate(str.maketrans('', '', string.punctuation)).lower()
result = search.lower() in clean_text
print(result)  # True ("мир" есть в "привет мир")
True

Использование метода str.__contains__() напрямую (для демонстрации)

Пример

text = "Магия Python"
contains_method = text.__contains__
print(contains_method("Python"))  # True
print(contains_method("Java"))    # False
True
False

Проверка наличия подстроки с учётом расстояния Левенштейна (нечёткое совпадение)

Пример

# Установите библиотеку pip install fuzzywuzzy python-Levenshtein
from fuzzywuzzy import fuzz
text = "пример тестовой строки"
query = "тест"
# Используем частичное отношение (где находится лучшая подстрока)
ratio = fuzz.partial_ratio(query, text)
print(ratio)  # 100, если подстрока найдена как часть
# Можно задать порог
if ratio >= 90:
    print("Подстрока почти совпадает")
100
Подстрока почти совпадает

Проверка вхождения подстроки (contains) в Python - comments

En
Python string contains (python)