Пропустить до содержимого

Как использовать и исправить проблемы с str.contains в Python?

[

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

Вам может потребоваться проверить, содержит ли строка подстроку в Python. Для этой цели в Python рекомендуется использовать оператор принадлежности in. В этом руководстве вы узнаете, как использовать этот оператор, а также как найти подстроки в столбцах pandas DataFrame.

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

Если вам нужно проверить, содержит ли строка подстроку, используйте оператор принадлежности in в Python. Это рекомендуемый способ подтвердить наличие подстроки в строке:

raw_file_content = """Hi there and welcome.
This is a special hidden file with a SECRET secret.
I don't want to tell you The Secret,
but I do want to secretly tell you that I have one."""
"secret" in raw_file_content

Оператор in дает вам быстрый и понятный способ проверить, содержится ли подстрока в строке. Вы можете заметить, что эта строка кода почти читается как обычный английский текст.

Примечание: Если вы хотите проверить, отсутствует ли подстрока в строке, тогда можно использовать оператор not in:

"secret" not in raw_file_content

Поскольку подстрока "secret" присутствует в raw_file_content, оператор not in вернет значение False.

Оператор in возвращает логическое значение (Boolean):

  • True, если подстрока найдена в строке
  • False, если подстрока не найдена в строке

Вы можете использовать этот интуитивно понятный синтаксис в условных операторах для принятия решений в вашем коде:

if "secret" in raw_file_content:
print("Нашел!")

В этом примере вы используете оператор принадлежности, чтобы проверить, есть ли подстрока "secret" в raw_file_content. Если она есть, то будет выведено сообщение “Нашел!“.

Обобщение проверки с поддержкой регистра

Используя оператор in, вы можете проверить наличие подстроки в строке с поддержкой регистра. То есть, оператор in учитывает регистр символов при сравнении:

raw_string = "This is a String"
substring = "string"
substring in raw_string # False

Поскольку подстрока "string" отличается от "String" по регистру символов, оператор in возвращает значение False. Если вам нужно выполнить проверку без учета регистра, существуют несколько способов это сделать.

Использование метода lower() для обобщения проверки

Один из способов обобщить проверку и игнорировать регистр символов - это использовать метод lower() для приведения обоих строк к нижнему регистру:

raw_string = "This is a String"
substring = "string"
substring.lower() in raw_string.lower() # True

Теперь, приведя обе строки к нижнему регистру, оператор in возвращает значение True, потому что подстрока "string" содержится в строке "this is a string".

Узнайте больше о подстроке

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

raw_string = "This is a string and it is a long string"
substring = "string"
# Индекс первого вхождения подстроки
index = raw_string.index(substring)
print(f"Первое вхождение подстроки: {index}")
# Количество вхождений подстроки
count = raw_string.count(substring)
print(f"Количество вхождений подстроки: {count}")

Приведенный выше код демонстрирует использование методов index() и count() для получения индекса первого вхождения подстроки и количества вхождений подстроки в строке. В результате будет выведено:

Первое вхождение подстроки: 10
Количество вхождений подстроки: 2

Таким образом, вы можете получить более подробную информацию о подстроке и использовать эту информацию в своей программе.

Поиск подстроки с использованием регулярных выражений

Например, вы можете использовать модуль re в Python для поиска подстроки с использованием регулярного выражения:

import re
raw_string = "This is a string"
substring_pattern = r"st[a-z]+"
match = re.search(substring_pattern, raw_string)
if match:
print("Подстрока найдена!")

В этом примере используется регулярное выражение st[a-z]+, которое соответствует подстрокам, начинающимся с буквы “st” и содержащим любые буквы нижнего регистра. Если подстрока найдена, будет выведено сообщение “Подстрока найдена!“.

Поиск подстроки в столбце pandas DataFrame

Если вам нужно выполнить поиск подстроки в столбце pandas DataFrame, есть удобный способ это сделать с помощью метода str.contains():

import pandas as pd
data = {
"Name": ["John", "Jane", "Alice", "Bob"],
"Title": ["Software Engineer", "Data Scientist", "Web Developer", "Software Developer"]
}
df = pd.DataFrame(data)
substring = "Developer"
filtered_df = df[df["Title"].str.contains(substring)]

В этом примере используется метод str.contains() для поиска подстроки "Developer" в столбце "Title" DataFrame. Результатом будет новый DataFrame filtered_df, содержащий только строки, в которых найдена заданная подстрока.

Итоги

В этом руководстве вы узнали, как проверить наличие подстроки в строке в Python с помощью оператора принадлежности in. Вы также узнали, как обобщить проверку, игнорируя регистр символов, и использовать другие методы для работы с подстроками. Кроме того, вы узнали, как использовать регулярные выражения для выполнения сложных проверок и поиска подстроки, а также как выполнять поиск подстроки в столбце pandas DataFrame. Надеюсь, эта информация будет полезной при работе с текстовыми данными в Python.