Поиск и замена
Методы поиска и замены строк внутри других строк.
Каждый метод в этой группе поддерживает необязательные аргументы <start> и <end>. Как и в строковых срезах действие метода ограничено частью исходной строки, начинающейся с позиции символа <start> и продолжающейся вплоть до позиции символа <end>, но не включающей ее. Если параметр <start> указан, а параметр <end> нет, то метод применяется к части исходной строки от <start> до конца строки. Если параметры не заданы, то подразумевается, что <start> = 0, <end> = len(s).
Метод count()
Метод count(<sub>, <start>, <end>) считает количество непересекающихся вхождений подстроки <sub> в исходную строку s.
Приведённый ниже код:
s = 'foo goo moo'
print(s.count('oo'))
print(s.count('oo', 0, 8))
выводит:
3
2
Метод startswith()
Метод startswith(<suffix>, <start>, <end>) определяет, начинается ли исходная строка s подстрокой <suffix>. Если исходная строка начинается с подстроки <suffix>, метод возвращает значение True, а если нет, то значение False.
Приведённый ниже код:
s = 'foobar'
print(s.startswith('foo'))
print(s.startswith('baz'))
выводит:
True
False
Метод endswith()
Метод endswith(<suffix>, <start>, <end>) определяет, оканчивается ли исходная строка s подстрокой <suffix>. Метод возвращает значение True, если исходная строка оканчивается на подстроку <suffix>, или False в противном случае.
Приведённый ниже код:
s = 'foobar'
print(s.endswith('bar'))
print(s.endswith('baz'))
выводит:
True
False
Методы find(), rfind()
Метод find(<sub>, <start>, <end>) находит индекс первого вхождения подстроки <sub> в исходной строке s. Если строка s не содержит подстроки <sub>, то метод возвращает значение -1. Мы можем использовать данный метод наравне с оператором in для проверки: содержит ли заданная строка некоторую подстроку или нет.
Приведённый ниже код:
s = 'foo bar foo baz foo qux'
print(s.find('foo'))
print(s.find('bar'))
print(s.find('qu'))
print(s.find('python'))
выводит:
0
4
20
-1
Метод rfind(<sub>, <start>, <end>) идентичен методу find(<sub>, <start>, <end>), за тем исключением, что он ищет первое вхождение подстроки <sub>, начиная с конца строки s.
Методы index(), rindex()
Метод index(<sub>, <start>, <end>) идентичен методу find(<sub>, <start>, <end>), за тем исключением, что он вызывает ошибку ValueError: substring not found во время выполнения программы, если подстрока <sub> не найдена.
Метод rindex(<sub>, <start>, <end>) идентичен методу index(<sub>, <start>, <end>), за тем исключением, что он ищет первое вхождение подстроки <sub>, начиная с конца строки s.
Методы find() и rfind() являются более безопасными чем index() и rindex(), так как не приводят к возникновению ошибки во время выполнения программы.
Метод strip()
Метод strip() возвращает копию строки s, у которой удалены все пробелы, стоящие в начале и конце строки.
Приведённый ниже код:
s = ' foo bar foo baz foo qux '
print(s.strip())
выводит:
foo bar foo baz foo qux
Метод lstrip()
Метод lstrip() возвращает копию строки s, у которой удалены все пробелы, стоящие в начале строки.
Приведённый ниже код:
s = ' foo bar foo baz foo qux '
print(s.lstrip())
выводит:
foo bar foo baz foo qux⎵ ⎵ ⎵ ⎵ ⎵ ⎵
Метод rstrip()
Метод rstrip() возвращает копию строки s, у которой удалены все пробелы, стоящие в конце строки.
Приведённый ниже код:
s = ' foo bar foo baz foo qux '
print(s.rstrip())
выводит:
⎵ ⎵ ⎵ ⎵ ⎵ ⎵foo bar foo baz foo qux
Методы strip(), lstrip(), rstrip() могут принимать на вход опциональный аргумент <chars>. Необязательный аргумент <chars> – это строка, которая определяет набор символов для удаления.
Метод replace()
Метод replace(<old>, <new>) возвращает копию s со всеми вхождениями подстроки <old>, замененными на <new>.
Приведённый ниже код:
s = 'foo bar foo baz foo qux'
print(s.replace('foo', 'grault'))
выводит:
grault bar grault baz grault qux
Метод replace() может принимать опциональный третий аргумент <count>, который определяет количество замен.
Приведённый ниже код:
s = 'foo bar foo baz foo qux'
print(s.replace('foo', 'grault', 2))
выводит:
grault bar grault baz foo qux