Python. Функції пошуку та заміни підрядка в рядку

Функції пошуку та заміни підрядка в рядку


Зміст


1. Функція str.count(). Кількість входжень підрядка в заданому діапазоні

Функція str.count() повертає кількість входжень підрядка в заданому діапазоні. Згідно документації Python загальна форма використання функції наступна

n = str.count(substring[, start[, end]])

де

  • n – результат, кількість входжень підрядка substring в рядку str які не перекриваються;
  • str – рядок, що розглядається;
  • substring – підрядок, що може входити в рядок str;
  • start, end – відповідно початкова та кінцева позиції (індекси) в рядку str, що визначають діапазон який приймається до уваги (роглядається). Іншими словами значення start, end визначають зріз.

Приклад.

# Функція str.count() - кількість входжень підрядка у заданому діапазоні

# 1. Виклик функції з задаванням діапазону
s1 = 'abcdef' # заданий рядок
n = s1.count('bcd', 0, len(s1)) # n = 1, діапазон 0..5

n = 'ab ab babab'.count('ab', 2, 10) # n = 2
n = 'ab ab babab'.count('ab', 0, 6) # n = 2

# 2. Виклик функції без задавання діапазону
s1 = 'Hello world!'
n = s1.count('o') # n = 2, к-сть символів 'o' у рядку

s1 = 'abcbcd abcd'
n = s1.count("bc") # n = 3

# 3. Виклик функції з задаванням початкового значення start
s1 = 'abc abc abcd'
n = s1.count('abc', 3) # n = 2

 

2. Функція str.find(). Пошук підрядка в рядку

Функція find() призначена для пошуку підрядка в рядку. Згідно з документацією Python загальна форма виклику функції наступна:

index = s.find(sub [, start[, end]])

де

  • index – цілочисельне значення, що є індексом першого входження підрядка sub в рядку s. Якщо підрядка sub немає в рядку s, то index=-1;
  • s – рядок, в якому здійснюється пошук підрядка sub;
  • start, end – позиції в рядку s. Ці позиції визначають межі зрізу s[start:end], який становить діапазон, що обробляється. Якщо не задавати параметри start, end, то пошук здійснюється у всьому рядку.

Приклад.

# Функція str.find() - пошук підрядка в рядку

# Вихідний рядок, в якому здійснюється пошук
s = 'abcde fg hijkl mnop'

# 1. Обробка цілого рядка
index = s.find('hij') # index = 9
index = s.find('+-=') # index = -1

# 2. Обробка зрізу s[start:end]
# береться до уваги частина 'abcde' рядка s
index = s.find('hij', 0, 5) # index = -1
index = s.find('cde', 0, 5) # index = 2

index = 'hello world!'.find('wor', 2, len(s)) # index = 6


 

3. Функція str.index(). Пошук підрядка в рядку з генеруванням виключення

Функція str.index() здійснює пошук підрядка в рядку. Дана функція працює так само як і функція str.find(), однак, якщо підрядок не знайдено, то викликається виключення ValueError.

Згідно документації Python загальна форма виклику функції наступна:

pos = str.index(substring [, start [, end]])

де

  • pos – позиція підрядка substring в рядку str у випадку, якщо підрядок знайдено. Якщо підрядок не знайдено, то викликається виключення ValueError;
  • str – рядок, в якому здійснюється пошук;
  • start, end – відповідно початкова та кінцева позиції в рядку str, які визначають діапазон пошуку.

Приклад.

# Функція str.index() - пошук підрядка в рядку

# Випадок 1. Генерується виключення ValueError: substring not found
#t = str.index('sdf', 'abcdef def hj') - виключна ситуація

# Випадок 2. Підрядок існує в рядку
s = 'abcdef'
t = s.index('bc') # t = 1 - позиція знайденого підрядка

# Пошук в заданому діапазоні
s = 'abc def ghi def'
t = s.index('def', 0, len(s)) # t = 4

# Пошук в діапазоні '012'
s = '0123456789'
t = s.index('012', 0, 3) # t = 0

 

4. Функція str.rfind(). Знайти найбільший індекс входження підрядка в рядок

Функція str.rfind() повертає найбільшу позицію (індекс) в рядку заданого підрядка, якщо такий знайдено. Загальна форма використання функції наступна:

position = str.rfind(subs[, start[, end]])

де

  • position – шукана позиція (індекс) входження підрядка subs в рядку str. Якщо підрядок subs в рядку str не знайдено, то position=-1;
  • str – рядок, в якому здійснюється пошук підрядка subs;
  • subs – заданий підрядок;
  • start, end – відповідно початковий індекс та кінцевий індекс що визначають зріз в рядку str.

Приклад.

# Функція str.rfind()

# 1. Використання без задавання діапазону
s1 = 'abc def ab abc'
index = s1.rfind('ab') # index = 11
index = s1.rfind('jkl') # index = -1

# 2. Використання з задаванням початку start
s1 = '012 345 012'
index = s1.rfind('01', 3) # index = 8

# 3. Використання з задаванням початку start і кінця end
s1 = 'abc def abc def gh'
s2 = 'bc' # підрядок
index = s1.rfind(s2, 0, len(s1)) # index = 9
index = s1.rfind(s2, 0, 1) # index = -1, підрядок не знайдено

 

5. Функція str.rindex(). Знайти найбільший індекс входження підрядка в рядок з генеруванням виключення ValueError

Функція str.rindex() працює так само як і функція rfind(), тобто повертає найбільшу позицію підрядка в рядку. Різниця між rindex() та rfind() полягає в наступному: якщо підрядок не знайдено в рядку, то генерується виключення ValueError.

Загальна форма використання функції наступна:

position = str.rindex(subs[, start[, end]])

де

  • position – шукана позиція (індекс) входження підрядка subs в рядку str. Якщо підрядок subs в рядку str не знайдено, генерується виключення ValueError;
  • str – рядок, в якому здійснюється пошук підрядка subs;
  • subs – заданий підрядок;
  • start, end – відповідно початковий індекс та кінцевий індекс що визначають зріз в рядку str.

Приклад.

# Функція str.index()

# 1. Використання без задавання діапазону
s1 = 'abc def ab abc'
index = s1.rindex('ab') # index = 11
index = str.rindex(s1, ' ') # index = 10, символ пробіл на 10-й позиції

# 2. Використання з задаванням початку start
s1 = '012 345 012'
index = s1.rindex('01', 3) # index = 8

# 3. Використання з задаванням початку start і кінця end
s1 = 'abc def abc def gh'
s2 = 'bc' # підрядок
index = s1.rindex(s2, 0, len(s1)) # index = 9

# Наступний код згенерує виключення
# ValueError: substring not found
index = s1.rindex(s2, 0, 1)

 

6. Функція str.replace(). Заміна підрядка в рядку

Функція str.replace() повертає копію рядка, в якій всі входження підрядка old замінені на new.

Загальна форма використання функції

s1 = s2.replace(old, new[, count])

де

  • s1 – результуючий рядок-копія;
  • s2 – рядок-оригінал, в якому робляться заміни підрядка old на підрядок new;
  • old – підрядок, який має бути замінений іншим підрядком new. Кількість символів в підрядку довільна. Якщо підрядку old не знайдено в рядку s2, тоді функція повертає рядок s2 без будь-яких змін;
  • new – підрядок, який замінює підрядок old в рядку s2;
  • count – кількість замін які можуть бути здійснені. Якщо count не задано, то заміни здійснюються у всіх можливих входженнях підрядків old в рядку s2.

Приклад.

# Функція str.replace() - заміна підрядка в рядку

# 1. Виклик без використання параметру count
s1 = 'abcdef'
s2 = s1.replace('bc', '111') # s2 = 'a111def'

s1 = 'abc abc abc'
s2 = s1.replace('bc', '0000') # s2 = 'a0000 a0000 a0000'

# Випадок, коли підрядок в рядку не знайдено
s2 = str.replace(s1, 'jkl', '111') # s2 = 'abcdef'

# 2. Виклик з використанням параметру count
s1 = 'abcd abcd abcd'
s2 = s1.replace('bcd', '+++', 3) # s2 = 'a+++ a+++ a+++'
s2 = s1.replace('bcd', '++++', 2) # s2 = 'a++++ a++++ abcd'
s2 = s1.replace('ab', '---', 1) # s2 = '---cd abcd abcd'
s2 = s1.replace('abcd', '==', 6) # s2 = '== == =='

 


Зв’язані теми