7 способів перевірити, чи містить рядок Python підрядок

Робота з рядками є типовим завданням у Python. Часто потрібно з’ясувати, чи містить рядок інший рядок.

Найпростіші методи перевірити, чи містить рядок Python підрядок, включають оператор «in», функцію find() і метод index(). Більш складні сценарії можна вирішити за допомогою регулярних виразів або зовнішньої бібліотеки, наприклад Pandas.

У цій статті показано:

  • чотири прості способи

  • ще дві складні регулярні функції

  • метод із використанням бібліотеки Pandas

Ви дізнаєтеся про кожну техніку на прикладах їх синтаксису та використання. Ви також отримаєте поради щодо того, який метод найкраще підходить для різних вимог.

Давайте розпочнемо!

Зміст

Основи рядків Python

Рядок у Python — це послідовність символів, яка використовується для представлення текстових даних. Вони можуть містити літери, цифри, символи та пробіли.

Це один із вбудованих типів даних Python, і його можна створити за допомогою:

  • одинарні лапки (' ')

  • подвійні лапки (" ")

  • потрійні лапки (”' ”' або “”” “””)

Рядки індексовані, що означає, що ви можете отримати доступ до певних символів, посилаючись на їхній індексний номер. Початковий індекс дорівнює 0, що означає, що перший символ рядка має індекс 0, другий має індекс 1 і так далі.

Далі ми розглянемо способи перевірки підрядків.

4 найпростіших способи перевірити наявність підрядків

Python надає багато способів перевірити, чи існує певний підрядок у більшому рядку. Деякі є більш складними, ніж інші. Для найпростіших перевірок найпростішими методами є оператор in або один із трьох рядкових методів.

  1. в оператора

  2. метод find().

  3. метод index().

  4. метод count().

7 способів перевірити, чи містить рядок Python підрядок

1. В Оператор

Оператор «in» у Python — це простий та інтуїтивно зрозумілий спосіб перевірити, чи існує один рядок в іншому рядку. Цей оператор перевіряє членство та повертає логічне значення:

  • Правда, якщо підрядок знайдено в основному рядку

  • False, якщо це не так

Ось приклад коду:

s = "Hello, world!"
sub = "world"
result = sub in s
print(result)  # Output: True

Оператор "in" чутливий до регістру. Це означає, що символи нижнього та верхнього регістру розглядаються як різні. Наведений вище код не знайде підрядок «hello», тому оператор повертає false.

Якщо ви хочете виконати перевірку без урахування регістру, ви можете перетворити основний рядок і підрядок на той самий регістр перед виконанням перевірки:

s = "Hello, world!"
sub = "hello"
result = sub.lower() in s.lower()
print(result)  # Output: True

Недоліком оператора in є те, що він не забезпечує положення підрядка в основному рядку. Для цього вам знадобиться інший метод у цьому розділі. Читайте далі…

2. Метод Find().

Метод find() повертає перший індекс, у якому з’являється підрядок, або -1 , якщо підрядок не знайдено.

Ви викликаєте метод find() для рядка s , передаючи підрядок sub як аргумент. Ось приклад:

s = "Hello, world!"
sub = "world"
index = s.find(sub)

if index != -1:
     print("Found at index:", index)  # Output: Found at index: 7
else:
     print("Not found")

Ви можете додатково вказати початковий або кінцевий індекс, щоб обмежити пошук. Недоліком цього методу є те, що він зупиняється при першій зустрічі.

3. Метод Index().

Метод index() дуже схожий на метод find() , за винятком того, що він викликає помилку ValueError, коли підрядок не знайдено. Це означає, що вам слід загорнути виклик у розділ Try/Except.

Щоб використовувати метод index() , викличте його в рядку s і передайте підрядок sub як аргумент.

s = "Hello, world!"
sub = "world"

try: 
     index = s.index(sub)
     print("Found at index:", index)  # Output: Found at index: 7
except ValueError:
     print("Not found")

Цей метод також зупиняється на першому підрядку всередині тексту.

4. Метод Count().

Метод .count() підраховує, скільки разів підрядок зустрічається у вихідному рядку. Він повертає ціле число, що представляє цю кількість. Якщо підрядок не знайдено в основному рядку, повертається 0.

Ось простий приклад пошуку літери «o» в тексті «Hello, world!»:

s = "Hello, world!"
sub = "o"
print(s.count(sub))  # Output:2

2 способи зіставлення рядків із регулярними виразами

Використання (regex) трохи складніше, ніж методи в попередньому розділі. Однак вони дають вам більше можливостей для пошуку та аналізу тексту, з яким ви маєте справу.

Два найпростіших способи в модулі re :

  1. пошук()

  2. findall()

7 способів перевірити, чи містить рядок Python підрядок

1. re.Search()

Функція search () у модулі re шукає шаблон у заданому рядку та повертає відповідний об’єкт, якщо відповідність знайдено. В іншому випадку він повертає None .

За замовчуванням функція чутлива до регістру. Ви можете використовувати позначку re.IgnoreCase , щоб уникнути чутливості до регістру.

Ось простий приклад, який використовує умовні оператори на основі того, чи знайдено рядок:

import re
pattern = "python"
text = "I love Python programming"
match = re.search(pattern, text, re.IGNORECASE)

if match: 
     print("Pattern found")
else:
     print("Pattern not found")

Зауважте, що цей метод знаходить перший збіг, а потім припиняє пошук. Якщо ви хочете знайти всі збіги, тоді наступний у цьому списку для вас.

2. re.Findall()

Цей метод знаходить усі випадки шаблону пошуку в заданому рядку та повертає список із усіма збігами.

У цьому прикладі використовується шаблон, який відповідає одній чи більше цифрам у рядку. Текстовий рядок «123, 456, 789» містить три послідовності цифр.

import re 

pattern = "d+" 
text = "123, 456, 789" 
numbers = re.findall(pattern, text) 

print(numbers)

Це відповідь із прикладу коду: ['123', '456', '789'].

Як знайти підрядки за допомогою Pandas

7 способів перевірити, чи містить рядок Python підрядок

Pandas — це популярна бібліотека аналізу та обробки даних із відкритим кодом для Python. Він надає структури даних і функції, необхідні для обробки та аналізу структурованих даних.

Однією з основних структур даних, які надає Pandas, є DataFrame. Ви можете використовувати цю універсальну структуру даних для перевірки наявності одного рядка в іншому.

Перевага Pandas полягає в тому, що він надає пакети коду, які вам довелося б багато писати іншими мовами програмування. Зокрема, багато потужності упаковано всередині функції content.

Функція str.contains() у Pandas

Метод str.contains() перевіряє, чи міститься вказаний шаблон або регулярний вираз у рядку стовпця DataFrame.

Ось приклад імпорту бібліотеки та пошуку рядка в списку рядків:

import pandas as pd

# Creating a sample DataFrame 
data = {'fruits': ['apple', 'banana', 'cherry', 'watermelon', 'orange']} 
df = pd.DataFrame(data) 

# Searching for substrings in the 'fruits' column 
has_an = df['fruits'].str.contains(pat='an', regex=False)

# Filtering the DataFrame based on the search results 
filtered_df = df[has_an] 
print(filtered_df)

У цьому прикладі ми шукаємо підрядок «an» у стовпці «fruits» і відповідно фільтруємо DataFrame. Результатом буде:

  • 1 банан

  • 4 апельсина

Якщо ви шукаєте більше прикладів того, на що здатні Pandas, перегляньте це відео:

Поради щодо вибору конкретного методу в Python

Вибір методу багато в чому залежить від конкретних вимог вашого завдання.

Ось чотири причини вибрати один із методів, про які ви дізналися з цієї статті, а також один бонусний метод, який ви дізнаєтеся в іншому місці цього блогу:

  1. Швидкість обробки

  2. Потрібно знати розташування підрядка

  3. Потрібно знати кількість входжень підрядка

  4. Ви хочете поєднати складні візерунки

  5. Виконання аналізу тексту

1. Швидкість обробки

7 способів перевірити, чи містить рядок Python підрядок

Оператор 'in' 0 — найкращий вибір, якщо ви просто хочете знати, чи існує підрядок у рядку.

Для цього це просто, інтуїтивно зрозуміло та швидко. Однак він не надає інформації про розташування або кількість підрядка.

2. Розташування підрядка

Використовуйте методи .find() або .index() , якщо вам потрібно знати позицію першого входження підрядка в рядку.

Вони обидва повертають індекс першого входження підрядка.

3. Кількість підрядків

Використовуйте метод .count() , якщо хочете дізнатися, скільки разів підрядок зустрічається в рядку.

4. Складні візерунки

Якщо вам потрібно зіставити складні шаблони або виконати пошук без урахування регістру, регулярні вирази є найбільш гнучкими. Функція re.search () може обробляти шаблони, крім простих підрядків, і може легко виконувати пошук без урахування регістру.

Однак регулярні вирази можуть бути надмірними для простих перевірок підрядків, а також можуть бути повільнішими та складнішими у використанні та обслуговуванні.

5. Виконання аналізу тексту

Перегляньте нашу статтю про те, як працювати з бібліотекою текстових блоків.

Ви можете використовувати функцію .tags , щоб перевірити наявність частин мови, або функцію .ngram , щоб знайти слова, які часто зустрічаються разом у документі.

Заключні думки

Ви навчилися семи методів перевірки того, чи слово або рядковий об’єкт міститься в іншому. До них входили оператори членства, вбудовані функції, регулярні вирази та функції Pandas.

Кожен метод є правильним для деяких ситуацій, але не для всіх. Використовуйте цю статтю, щоб освоїти мову програмування Python і використовувати найкраще рішення для завдання аналізу рядків.

Пам’ятайте, що універсального методу не існує. Кожен підхід має свої переваги та особливості, тому сміливо вибирайте той, який відповідає вашому стилю чи конкретній проблемі, яку ви намагаєтеся вирішити. Зрештою, Python призначений для полегшення вашого життя, тому прийміть його гнучкість!


Змініть формати дати за допомогою редактора Power Query

Змініть формати дати за допомогою редактора Power Query

У цьому посібнику ви дізнаєтеся, як перетворити текст у формат дати за допомогою редактора Power Query в LuckyTemplates.

Power Query: об’єднайте файли з кількох папок

Power Query: об’єднайте файли з кількох папок

Дізнайтеся, як об’єднати файли з кількох папок у мережі, робочому столі, OneDrive або SharePoint за допомогою Power Query.

Обчисліть місячне ковзне середнє з початку року (з початку року) у LuckyTemplates

Обчисліть місячне ковзне середнє з початку року (з початку року) у LuckyTemplates

Цей підручник пояснює, як обчислити місячне ковзне середнє на базі даних з початку року за допомогою функцій AVERAGEX, TOTALYTD та FILTER у LuckyTemplates.

Створення таблиці дат у LuckyTemplates

Створення таблиці дат у LuckyTemplates

Дізнайтеся, чому важлива спеціальна таблиця дат у LuckyTemplates, і вивчіть найшвидший і найефективніший спосіб це зробити.

Мобільні звіти LuckyTemplates. Поради та методи

Мобільні звіти LuckyTemplates. Поради та методи

У цьому короткому посібнику розповідається про функцію мобільних звітів LuckyTemplates. Я збираюся показати вам, як ви можете ефективно створювати звіти для мобільних пристроїв.

Звіти про професійну аналітику послуг у LuckyTemplates

Звіти про професійну аналітику послуг у LuckyTemplates

У цій презентації LuckyTemplates ми розглянемо звіти, що демонструють професійну аналітику послуг від фірми, яка має кілька контрактів і залучених клієнтів.

Оновлення Microsoft Power Platform | Microsoft Ignite 2021

Оновлення Microsoft Power Platform | Microsoft Ignite 2021

Ознайомтеся з основними оновленнями для Power Apps і Power Automate, а також їх перевагами та наслідками для Microsoft Power Platform.

Загальні функції SQL: огляд

Загальні функції SQL: огляд

Відкрийте для себе деякі поширені функції SQL, які ми можемо використовувати, наприклад String, Date і деякі розширені функції для обробки та маніпулювання даними.

Створення шаблону LuckyTemplates: керівництво та поради

Створення шаблону LuckyTemplates: керівництво та поради

У цьому підручнику ви дізнаєтеся, як створити свій ідеальний шаблон LuckyTemplates, налаштований відповідно до ваших потреб і вподобань.

Параметри полів і малі кратні в LuckyTemplates

Параметри полів і малі кратні в LuckyTemplates

У цьому блозі ми продемонструємо, як шарувати параметри поля з малими кратними, щоб створити неймовірно корисну інформацію та візуальні ефекти.