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('о') # n = 2, количество символов 'о' в строке

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 = '== == =='

 


Связанные темы