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

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

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

* Как использовать Python для проверки наличия подстроки в строке с помощью оператора `in`, метода `.index()`, метода `.find()` и т. д.
* Как игнорировать чувствительность к регистру при проверке, содержит ли строка Python подстроку
* Фильтрация DataFrame Pandas, если столбец содержит подстроку
* Проверка наличия в строке подстроки шаблона с использованием регулярного выражения

Оглавление

* [Проверка того, содержит ли строка Python подстроку с помощью `in`](#proverka-togo-soderzhit-li-stroka-python-podstroku-s-pomoshyu-in)
* [Проверка того, содержит ли строка Python подстроку с помощью `find`](#proverka-togo-soderzhit-li-stroka-python-podstroku-s-pomoshyu-find)
* [Проверка того, содержит ли строка Python подстроку с `index`](#proverka-togo-soderzhit-li-stroka-python-podstroku-s-indeksom)
* [Проверка того, содержит ли строка Python подстроку со count](#proverka-togo-soderzhit-li-stroka-python-podstroku-so-schetchikom)
* [Фильтрация списка строк, если они содержат подстроку](#filtraciya-spiska-strok-esli-oni-soderzhat-podstroku)
* [Проверка наличия подстроки в строке Python без учета регистра](#proverka-nalichiya-podstroki-v-stroke-python-bez-ucheta-registra)
* [Проверка того, содержит ли строка Python образец текста](#proverka-togo-soderzhit-li-stroka-python-obrazec-teksta)
* [Проверка наличия подстроки в столбце Pandas](#proverka-nalichiya-podstroki-v-stolbce-pandas)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

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

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

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

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

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

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

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

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

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

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

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

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

```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
# Проверка наличия подстроки в строке на Python
a_string = 'Добро пожаловать на bemind.gitbook.io'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```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()`, который проверяет, содержит ли строка подстроку. Давайте посмотрим на пример:

```python
# Проверка наличия подстроки в столбце 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](https://datagy.io/filter-pandas/), чтобы включить только строки, где столбец `'b'` содержит подстроку

### Заключение

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

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

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

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

* Как объединить строки в Python: полное руководство
* Как проверить, пуста ли строка в Python
* Python zfill & rjust: заполнение строки в Python
* Python: удалить символ из строки (4 способа)
* [Строки Python: официальная документация](https://docs.python.org/3/library/string.html)
