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 призначений для полегшення вашого життя, тому прийміть його гнучкість!


Труба в R: підключення функцій за допомогою Dplyr

Труба в R: підключення функцій за допомогою Dplyr

У цьому підручнику ви дізнаєтесь, як об’єднати функції разом за допомогою оператора каналу dplyr мовою програмування R.

RANKX Deep Dive: функція LuckyTemplates DAX

RANKX Deep Dive: функція LuckyTemplates DAX

RANKX від LuckyTemplates дозволяє повернути рейтинг певного числа в кожному рядку таблиці, який є частиною списку чисел.

Вилучення тем і зображень LuckyTemplates із PBIX

Вилучення тем і зображень LuckyTemplates із PBIX

Дізнайтеся, як розібрати файл PBIX, щоб витягти теми та зображення LuckyTemplates із фону та використовувати їх для створення звіту!

Шпаргалка формул Excel: Посібник середнього рівня

Шпаргалка формул Excel: Посібник середнього рівня

Шпаргалка формул Excel: Посібник середнього рівня

Календарна таблиця LuckyTemplates: що це таке та як ним користуватися

Календарна таблиця LuckyTemplates: що це таке та як ним користуватися

Календарна таблиця LuckyTemplates: що це таке та як ним користуватися

Python у LuckyTemplates: як встановити та налаштувати

Python у LuckyTemplates: як встановити та налаштувати

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

Розрахунок динамічної норми прибутку – легкий аналіз LuckyTemplates за допомогою DAX

Розрахунок динамічної норми прибутку – легкий аналіз LuckyTemplates за допомогою DAX

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

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

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

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

Знайдіть свої найкращі продукти для кожного регіону в LuckyTemplates за допомогою DAX

Знайдіть свої найкращі продукти для кожного регіону в LuckyTemplates за допомогою DAX

У цій статті я поясню, як знайти найпопулярніші продукти для регіону за допомогою обчислень DAX у LuckyTemplates, включаючи функції TOPN і CALCULATE.

Вимір сміття: що це таке і чому це щось інше, але не сміття

Вимір сміття: що це таке і чому це щось інше, але не сміття

Дізнайтеся, як використовувати вимірювання сміття для позначок низької потужності, які ви хочете ефективно включити у свою модель даних.