На этом шаге мы рассмотрим методы, которые используются для этих целей.
Для поиска и замены в строке используются следующие методы:
<Строка>.find (<Подстрока> [, <Начало> [, <Конец>] ])
Если начальная позиция не указана, то поиск будет осуществляться с начала строки. Если параметры <Начало> и <Конец> указаны, то производится операция извлечения среза:
<Строка>[<Начало>:<Конец>]
>>> s = "пример пример Пример" >>> s.find("при"), s.find("При"), s.find("тест") (0, 14, -1) >>> s.find("при", 9), s.find("при", 0, 6), s.find("при", 7, 12) (-1, 0, 7)
<Строка>.index(<Подстрока>[, <Начало>[, <Конец>]])
>>> s = "пример пример Пример" >>> s.index("при"), s.index("при", 7, 12), s.index("При", 1) (0, 7, 14) >>> s.index("тест") Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> s.index("тест") ValueError: substring not found
<Строка>.rfind(<Подстрока>[, <Начало>[, <Конец>]])
Если начальная позиция не указана, то поиск будет производиться с начала строки. Если параметры <Начало> и <Конец> указаны, то выполняется операция извлечения среза, и поиск подстроки будет производиться в этом фрагменте. Пример:
>>> s = "пример пример Пример Пример" >>> s.rfind("при"), s.rfind("При"), s.rfind("тест") (7, 21, -1) >>> s.rfind("при", 0, 6), s.rfind("При", 10, 20) (0, 14)
<Строка>.rindex(<Подстрока>[, <Начало>[, <Конец>]])
>>> s = "пример пример Пример Пример" >>> s.rindex("при"), s.rindex("При"), s.rindex("при", 0, 6) (7, 21, 0) >>> s.rindex("тест") Traceback (most recent call last): File "<pyshell#14>", line 1, in <module> s.rindex("тест") ValueError: substring not found
<Строка>.count(<Подстрока>[, <Начало>[, <Конец>]])
>>> s = "пример пример Пример Пример" >>> s.count("при"), s.count("при", 6), s.count("При") (2, 1, 2) >>> s.count("тест") 0
<Строка>.startswith(<Подстрока>[, <Начало>[, <Конец>]])
Если начальная позиция не указана, сравнение будет производиться с началом строки. Если параметры <Начало> и <Конец> указаны, то выполняется операция извлечения среза, и сравнение будет производиться с началом фрагмента. Пример:
>>> s = "пример пример Пример Пример" >>> s.startswith("при"), s.startswith("При") (True, False) >>> s.startswith("при", 6), s.startswith("При", 14) (False, True)
Начиная с Python версии 2.5, параметр <Подстрока> может быть кортежем:
>>> s = "пример пример Пример Пример" >>> s.startswith(("при", "При")) True
<Строка>.endswith(<Подстрока>[, <Начало>[, <Конец>]])
Если начальная позиция не указана, то сравнение будет производиться с концом строки. Если параметры <Начало> и <Конец> указаны указаны, то выполняется операция извлечения среза, и сравнение будет производиться с концом фрагмента. Пример:
>>> s = "подстрока ПОДСТРОКА" >>> s.endswith("ока"), s.endswith("ОКА") (False, True) >>> s.endswith("ока", 0, 9) True
Начиная с Python версии 2.5, параметр <Подстрока> может быть кортежем:
>>> s = "подстрока ПОДСТРОКА" >>> s.endswith(("ока", "ОКА")) True
<Строка>.replace(<Подстрока для замены>, <Новая подстрока> [, <Максимальное количество замен>] )
Если количество замен не указано, будет выполнена замена всех найденных подстрок. Пример:
>>> s = "Привет, Петя" >>> print(s.replace("Петя", "Вася")) Привет, Вася >>> print(s.replace("петя", "вася")) # Зависит от регистра Привет, Петя >>> s = "strstrstrstrstrstr" >>> s.replace("str",""), s.replace("str","", 3) ('', 'strstrstr')
>>> s = "Пример" >>> d = {ord("П"): None, ord("р"): ord("Р")} >>> d {1055: None, 1088: 1056} >>> s.translate(d) 'РимеР'
Упростить создание параметра <Таблица символов> позволяет статический метод maketrans (). Формат метода:
str.maketrans(<X>[, <Y>[, <Z>]])
Если указан только первый параметр, то он должен быть словарем:
>>> t = str.maketrans({"а": "А", "о": "О", "с": None}) >>> t {1072: 'А', 1086: 'О', 1089: None} >>> "строка".translate(t) 'трОкА'
Если указаны два первых параметра, то они должны быть строками одинаковой длины. В результате будет создан словарь с ключами из строки <X> и значениями из строки <Y>, расположенными в той же позиции. Изменим регистр некоторых символов:
>>> t = str.maketrans("абвгдежзи", "АБВГДЕЖЗИ") >>> t {1072: 1040, 1073: 1041, 1074: 1042, 1075: 1043, 1076: 1044, 1077: 1045, 1078: 1046, 1079: 1047, 1080: 1048} >>> "абвгдежзи".translate(t) 'АБВГДЕЖЗИ'
В третьем параметре можно дополнительно указать строку из символов, которым будет сопоставлено значение None. После выполнения метода translate() эти символы будут удалены из строки. Заменим все цифры на 0, а некоторые буквы удалим из строки:
>>> t = str.maketrans("123456789", "0" * 9, "str") >>> t {49: 48, 50: 48, 51: 48, 52: 48, 53: 48, 54: 48, 55: 48, 56: 48, 57: 48, 115: None, 116: None, 114: None} >>> "str123456789str".translate(t) '000000000'
На следующем шаге мы рассмотрим проверку типа содержимого строки.