Python String Contains: Проверка Наличия Подстроки в Строке

В этом руководстве вы узнаете, как использовать Python для проверки, содержит ли строка другую подстроку. Существует несколько способов использовать Python для проверки строки на наличие подстроки, включая нечувствительность к регистру, проверку шаблонов и многое другое. Умение работать со строками в Python — важный навык для программиста любого уровня.

К концу этого урока вы узнаете:

  • Как использовать Python для проверки наличия подстроки в строке с помощью оператора in, метода .index(), метода .find() и т. д.

  • Как игнорировать чувствительность к регистру при проверке, содержит ли строка Python подстроку

  • Фильтрация DataFrame Pandas, если столбец содержит подстроку

  • Проверка наличия в строке подстроки шаблона с использованием регулярного выражения

Оглавление

Проверка того, содержит ли строка Python подстроку с помощью in

Самый простой и "питоничный" способ проверить, содержит ли строка в Python подстроку, — использовать оператор in. Этот оператор ясно выражает, что вы пытаетесь достичь, и делает ваш код понятным любому читателю.

Оператор in вернет логическое значение: True, если подстрока найдена в строке, и False, если нет. Давайте рассмотрим пример:

# Использование оператора in для проверки, содержит ли строка подстроку
a_string = 'Добро пожаловать на bemind.gitbook.io'
print('bemind' in a_string)

# Возвращает: True

В приведенном выше примере мы использовали оператор in, чтобы проверить, существует ли подстрока 'bemind' в большей строке.

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

Проверка того, содержит ли строка Python подстроку с помощью find

Метод поиска строки Python позволяет возвращать начальный индекс подстроки, если она существует. Это аналогично многим другим языкам, которые явно не поддерживают оператор in

Метод string.find() имеет две возможности для возвращаемых значений:

  • Положительное целое число, представляющее начальный индекс первого вхождения подстроки

  • -1, если подстрока не существует

Давайте рассмотрим, как мы можем использовать метод .find(), чтобы проверить, существует ли подстрока в строке на Python:

# Использование .find() для проверки, содержит ли строка подстроку
a_string = 'Добро пожаловать на bemind.gitbook.io'

if a_string.find('bemind') >= 0:
    print('Строка существует')
else:
    print('Строка не существует')

Можно увидеть, что, поскольку строка содержит подстроку, она возвращает положительное значение индекса. Когда возвращается положительное значение индекса, условный оператор if-else выводит, что строка существует.

Проверка того, содержит ли строка Python подстроку с .index()

Метод index строки Python ищет подстроку в более широкой строке Python и возвращает начальный индекс, если подстрока существует. Это очень похоже на метод .find(), который мы рассмотрели в предыдущем разделе.

Одним из ключевых различий между методами Python .find() и .index() является то, что метод .index() вызовет ValueError, если подстрока не найдена.

Это означает, что для использования этого метода, мы можем повторить наш предыдущий пример, за исключением того, что мы обернем его в блок try-except. Давайте посмотрим, как это работает:

# Проверка наличия подстроки в строке на Python
a_string = 'Добро пожаловать на bemind.gitbook.io'

try:
    a_string.index('bemind')
    print('Строка существует')
except ValueError:
    print('Строка не существует')

Проверка того, содержит ли строка Python подстроку со счетчиком

Метод count() в Python можно использовать для проверки, содержит ли строка подстроку, подсчитывая количество её вхождений в исходной строке. Метод вернёт количество вхождений подстроки. Это значит, что если подстрока не существует, метод вернёт 0.

Давайте посмотрим, как мы можем использовать метод .count(), чтобы проверить, содержит ли строка в Python подстроку:

# Использование .count() для проверки наличия подстроки в строке
a_string = 'Добро пожаловать на bemind.gitbook.io'

if a_string.count('bemind'):
    print('Строка существует')
else:
    print('Строка не существует')

Причина, по которой это работает, заключается в том, что если строка не содержит подстроку, количество будет 0. В Python значение 0 оценивается как логическое False. Это означает, что блок else срабатывает.

Фильтрация списка строк, если они содержат подстроку

В этом разделе мы будем использовать оператор in, чтобы отфильтровать список строк на наличие подстроки. Для этого мы можем использовать цикл for для прохода по каждому элементу в списке и проверки наличия подстроки. Если она есть, то мы добавляем этот элемент в другой список.

Посмотрим на пример:

# Использование цикла for для фильтрации списка строк
strings = ['привет и добро пожаловать', 'в мир Python', 'Я программист на Python', 'только учусь']

отфильтрованные = []
for string in strings:
    if 'Python' in string:
        отфильтрованные.append(string)

print(отфильтрованные)

# Возвращает:
# ['в мир Python', 'Я программист на Python']

Мы можем значительно упростить этот подход с использованием включений списков, как показано ниже:

# Использование генератора списка для фильтрации списка строк
strings = ['привет и добро пожаловать', 'в мир Python', 'Я программист на Python', 'только учусь']

отфильтрованные = [string for string in strings if 'Python' in string]
print(отфильтрованные)

# Возвращает:
# ['в мир Python', 'Я программист на Python']

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

В этом разделе вы узнаете, как проверить, содержит ли строка в Python подстроку без учета регистра. Самый простой способ сделать это — проверить обе строки в их пониженных представлениях, использования метода .lower().

Затем мы можем использовать оператор in, чтобы проверить, находится ли подстрока в большей строке:

# Проверка наличия подстроки в строке на Python без учёта регистра
string = 'Привет и добро пожаловать на Bemind'
print('Bemind'.lower() in string.lower())

# Возвращает: True

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

Проверка того, содержит ли строка Python образец текста

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

Давайте рассмотрим, как мы можем сделать это с использованием Python:

# Проверка наличия подстроки в строке на Python
import re
string = 'Мой адрес электронной почты - [email protected]'
pattern = r'[\w\.-]+@[\w\.-]+'

print(bool(re.search(pattern, string)))

# Возвращает: True

В приведенном выше примере мы создаем шаблон, который проверяет строки, точки и дефисы, за которыми следует символ @, и которому предшествует ранее созданный шаблон.

Преобразуя объект re.search() в логическое значение, результат будет возвращать True, если шаблон найден, и False, если нет.

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

В этом разделе вы узнаете, как проверить, содержит ли столбец Pandas подстроку. Это может быть очень полезно для фильтрации DataFrame Pandas на основе столбца, содержащего подстроку.

Pandas делает это легко с помощью метода str.contains(), который проверяет, содержит ли строка подстроку. Давайте посмотрим на пример:

# Проверка наличия подстроки в столбце Pandas
import pandas as pd
df = pd.DataFrame.from_dict({
    'a': [1, 2, 3, 4, 5],
    'b': ['яблоко, банан', 'апельсин, банан', 'яблоко, апельсин', 'яблоко, банан', 'апельсин, банан']
})

print(df[df['b'].str.contains('апельсин')])

# Возвращает:
#    a                b
# 1  2  апельсин, банан
# 2  3   яблоко, апельсин
# 4  5  апельсин, банан

В приведенном выше примере мы фильтруем DataFrame Pandas, чтобы включить только строки, где столбец 'b' содержит подстроку

Заключение

В этом уроке вы узнали, как использовать Python для проверки наличия подстроки в строке. Существует несколько способов достичь этого, но самый "pythonic" и чистый способ — использование оператора in. Тем не менее, знание использования методов .find(), .index() и .count() также сделает вас более сильным программистом.

Вы также узнали, как проверить, содержит ли строка Python подстроку без учета регистра, и как проверить наличие шаблона в более широкой строке. Наконец, вы узнали, как отфильтровать DataFrame в Pandas, если подстрока найдена в строке.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с руководствами ниже:

  • Как объединить строки в Python: полное руководство

  • Как проверить, пуста ли строка в Python

  • Python zfill & rjust: заполнение строки в Python

  • Python: удалить символ из строки (4 способа)

Last updated