Поиск символа или подстроки в строке
Часто нам нужно найти символ в строке python. Для решения этой задачи разработчики используют метод find() . Он помогает найти индекс первого совпадения подстроки в строке. Если символ или подстрока не найдены, find возвращает -1.
Синтаксис
Метод find принимает три параметра:
- substring (символ/подстрока) — подстрока, которую нужно найти в данной строке.
- start (необязательный) — первый индекс, с которого нужно начинать поиск. По умолчанию значение равно 0.
- end (необязательный) — индекс, на котором нужно закончить поиск. По умолчанию равно длине строки.
Поиск символов методом find() со значениями по умолчанию
Параметры, которые передаются в метод, — это подстрока, которую требуются найти, индекс начала и конца поиска. Значение по умолчанию для начала поиска — 0, а для конца — длина строки.
В этом примере используем метод со значениями по умолчанию.
Метод find() будет искать символ и вернет положение первого совпадения. Даже если символ встречается несколько раз, то метод вернет только положение первого совпадения.
Python String find()
Summary: in this tutorial, you’ll learn how to use the Python string find() method effectively to find a substring in a string.
Introduction to Python string find() method
The find() is a string method that finds a substring in a string and returns the index of the substring.
The following illustrates the syntax of the find() method:
The find() method accepts three parameters:
- sub is the substring to look for in the str .
- start and end parameters are interpreted as in the slice str[start:end] , which specifies where to search for the substring sub .
Both start and end parameters are optional. The start parameter defaults to zero. And the end parameter defaults to the length-1 where length is the length of the str .
If the str doesn’t contain the substring sub within the slice str[start:end] , the find() method returns -1.
In practice, you should use the find() method only if you want to know the position of the substring. If you just want to check whether a string contains a substring, you should use the in operator instead:
Python string find() method examples
Let’s take some examples of using the find() method.
1) Using the Python string find() method to find a substring in a string
The following example shows how to use the find() method to find the substring ‘Johny’ in the string ‘Johny Johny Yes Papa’ :
Because the string ‘Johny Johny Yes Papa’ has two substrings ‘Johny’ , the find() method returns the index of the first occurrence of the substring ‘Johny’ .
2) Using the Python string find() method to find a substring in a string within a slice
The following example uses the find() method to locate the substring ‘Johny’ in the string ‘Johny Johny Yes Papa’ within the slice str[1:] :
In this example, the find() method returns the index of the second occurrence of the substring ‘Johny’ in the string ‘Johny Johny Yes Papa’ .
3) The substring doesn’t exist in the string example
The following example returns -1 because the substring ‘Julia’ doesn’t exist in the string ‘Johny Johny Yes Papa’ :
Методы и функции строк в Python
Расскажем о самом популярном: дублировании, сложении, подсчёте длины, замене символов и работе с индексом.
Иллюстрация: Оля Ежак для Skillbox Media
Строковый тип данных — один из основных типов данных в Python. Он используется для хранения символьной информации: букв, чисел, знаков препинания и других символов. Например, отлично подходит для записи ФИО или адресов клиентов в базах данных.
В этой статье разберём полезные методы работы со строкам и узнаем, как их складывать, умножать, научимся считать индексы в строковых переменных попрактикуемся с кодом. Приступим!
Содержание
Вспомним, что такое строки
Строковый тип данных — это последовательности символов Unicode любой длины, заключённые в одинарные, двойные или тройные кавычки. Символами могут быть буквы, числа, знаки препинания, специальные символы и так далее. Главное — чтобы их с двух сторон окружали кавычки. В Python текстовый тип данных обозначается буквами str (от англ. string — строка).
Например, создадим три переменных, используя разное число кавычек:
Проверим, действительно ли мы создали переменные нужного типа. Для этого воспользуемся функцией type:
Запустим код и посмотрим на результат:
Да. Все три переменные имеют тип str, то есть являются строковыми.
Разберём подробнее, какие операции можно производить над строками, и поговорим про функции и методы этого типа данных.
Работа со строками в Python: базовые операции
Перед тем как перейти к конкретным действиям, напомним что строки в Python — неизменяемый тип данных. Это означает, что строковую переменную нельзя изменить с помощью операторов, функций и методов. Если мы хотим сохранить результат изменения существующей строки, то надо создать новую переменную.
Начнём! Разберём основные виды операций над строками. Запускайте любимый редактор кода и повторяйте действия за нами.
Сложение (конкатенация)
Строки, как и числа, можно складывать, проще говоря, склеивать между собой с помощью оператора +. Эту операцию иногда называют «сцеплением».
Здесь, в отличие от сложения чисел, перестановка мест слагаемых меняет результат:
Это важно помнить, не путая сложение строк со сложением чисел. В математическом плане это разные действия.
Вычитание
Настоящей операции вычитания строк, по аналогии с числами, в Python не существует — мы не сможем отнять символы из строки с помощью операции −. Но можно использовать метод replace().
Он создаёт новую строку путём замены частей исходной строки. Лучше всего показать это на примере. Попробуем удалить часть слова, заменив её пустой строкой:
В результате получим:
Дублирование (умножение)
В языке Python строки можно умножать на целые числа. Операция работает просто — повторяет содержимое переменной указанное количество раз. Например:
В результате получим:
Операцию умножения удобно использовать, если строку нужно продублировать много раз без ручного ввода. Например:
Принадлежность строки
Иногда разработчикам приходится проверять, есть ли в составе строки определённый фрагмент, который называют подстрокой. Например, мы хотим подтвердить наличие пользователя с определённым именем в нашей базе данных, где имя хранится вместе с фамилией — Иван Иванов. Строка здесь — это Иван Иванов, а нужная нам подстрока — Иван. Как это проверить? Воспользуемся проверкой принадлежности строки.
Для этого воспользуемся оператором in. Он возвращает True, если одна подстрока входит в состав строки, в противном случае возвращает False.
С помощью оператора in можно упростить поиск строк в разных переменных. Например, нам необходимо проверить наличие символа в четырёх строковых переменных. Мы можем написать такой код:
Выглядит сложно. Упростим его, объединив содержимое переменных в одну строку:
Не забывайте, что регистр символов имеет значение. Например, буквы «A» и «a» компьютер воспринимает как разные.
Определение длины строки
Это количество содержащихся в строке символов, включая пробелы. Чтобы определить длину строки, используется функция len() (от англ. length — длина). Например:
Доступ по индексу
Чтобы выделить один символ строки, используют индексацию. Нумерация символов начинается с нуля и заканчивается длиной строки −1.
Например, посмотрим на индексацию строковой переменной, значение которой равно ‘Skillbox’:
s | k | i | l | l | b | o | x |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Мы видим, что нумерация начинается с нуля, а заканчивается числом 7, то есть равна количеству символов в строке с вычетом единицы.
Чтобы распечатать символы по их индексу, его необходимо указать в квадратных скобках. Вот так:
В результате выполнения кода получим:
Если мы попытаемся использовать индекс больший, чем количество символов в строке, то получим ошибку. Проверим:
Индексацию также можно начинать с конца строки. В таком случае последний символ будет иметь индекс, равный −1, а индекс первого символа будет равен длине строки со знаком −. Посмотрим на такую индексацию на нашем примере:
s | k | i | l | l | b | o | x |
-8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
Если мы используем индекс меньше отрицательного значения длины строки, программа также выдаст ошибку IndexError, например:
В результате получим:
Срез строки
Если нам нужно получить не один символ, а часть строки, используются срезы. Срез с двумя параметрами выглядит так:
st[начальный индекс:конечный индекс]
Срез извлекает подстроку, начиная c начального индекса (включительно) и заканчивая последним индексом (не включая его), то есть символ с конечным индексом в срез не входит. Не забывайте, что индексация строки начинается с 0.
Результат выполнения кода:
Если не указывать начальный индекс, то срез берётся с начала строки. Если не указывать конечный — то до конца строки. Если опустить оба параметра, то срез возвращает всю строку. Попробуем несколько вариантов:
Если мы зададим конечный индекс среза больше, чем количество символов в строке, то ошибки не будет. В этом случае программа возвращает срез до конца строки.
Срез, в котором начальный индекс больше или равен конечному, возвращает пустую строку, например:
Этот код вернёт пустые строки, но ошибки не будет. Можете проверить в своём редакторе кода.
Индексы могут быть не только положительными, но и отрицательными. В этом случае отсчёт начинается с конца строки. Главное условие — начальный индекс должен быть меньше конечного или пропущен, иначе результатом будет пустая строка.
Например, программный код:
Шаг извлечения среза
В срез можно добавить третий параметр, который будет означать шаг извлечения символов.
Например, если мы возьмём срез st[0:6:2] строки st = ‘Python’, то получим строку ‘Pto’:
P | y | t | h | o | n |
---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 |
Рассмотрим пример с отрицательными индексами. Например, срез st[-6:-1:2] строки st = ‘Python’ тоже будет равен ‘Pto’:
P | y | t | h | o | n |
---|---|---|---|---|---|
−6 | −5 | −4 | −3 | −2 | −1 |
Шаг среза может быть отрицательным. В этом случае начальный индекс должен быть больше конечного. Символы будут включаться в срез в обратном порядке.
Например, срез st[-3:-7:-2] возвращает строку ‘hy’. Как видим, правая граница здесь не включается в срез.
P | y | t | h | o | n |
---|---|---|---|---|---|
−6 | −5 | −4 | −3 | −2 | −1 |
Отрицательный шаг можно использовать с положительными индексами, например:
Чтобы вывести символы строки в обратном порядке, удобно использовать срез [::−1], например:
В результате выполнения получим:
Работа со срезами может казаться сложной — надо правильно задавать интервал, шаг или даже использовать отрицательные индексы. Попробуйте попрактиковаться на разных примерах, меняя параметры среза. Через пару десятков слов точно получится разобраться.
Таблица методов и функций строк
Для строк существует несколько десятков полезных методов и функций, позволяющих преобразовывать текстовые переменные. Подробнее с ними можно ознакомиться в официальной документации. Собрали в таблицу наиболее популярные из них:
maxsplit — необязательный аргумент, определяет максимальное количество частей, на которые разбивается строка. Если он не задан, то количество фрагментов не ограничивается.
Примеры кода
Рассмотрим несколько практических примеров использования функций и методов.
Методы поиска подстроки
К ним относятся два метода: S.find(str, [start], [end]) и S.rfind(str, [start], [end]).
Результат выполнения кода:
Если подстроки в строке нет, Python возвращает −1:
Здесь подстрока str ищется в срезе S[0:7]. Так как правая граница в срез не включается, Python не находит подстроку и выдаёт −1.
Методы преобразования символов строки в верхний и нижний регистры
Для преобразования используются два метода:
- S.upper() — преобразование всех символов строки S в верхний регистр.
- S.lower() — преобразование всех символов строки S в нижний регистр.
И тот и другой метод возвращают новую строку, а исходная остаётся прежней.
В результате получим:
Если мы хотим сохранить результат, то результат выполнения метода надо присвоить новой переменной.
Метод разбиения строки по разделителю
Для разбиения строки по разделителю используется метод S.split([разделитель [, maxsplit]]). Посмотрим на него в коде:
В результате выполнения получим:
Мы рассмотрели понятия строки и текстового типа данных в Python. Подробно со всеми методами и функциями строк можно ознакомиться в документации.
Читайте также:
Стандарт кодирования символов, включающий в себя знаки почти всех письменных языков мира.
ASCII — это таблица кодировки символов, в которой каждой букве, числу или знаку соответствует определённое число.
Python find() – How to Search for a Substring in a String
Dionysia Lemonaki
When you’re working with a Python program, you might need to search for and locate a specific string inside another string.
This is where Python’s built-in string methods come in handy.
In this article, you will learn how to use Python’s built-in find() string method to help you search for a substring inside a string.
Here is what we will cover:
The find() Method — A Syntax Overview
The find() string method is built into Python’s standard library.
It takes a substring as input and finds its index — that is, the position of the substring inside the string you call the method on.
The general syntax for the find() method looks something like this:
Let’s break it down:
- string_object is the original string you are working with and the string you will call the find() method on. This could be any word you want to search through.
- The find() method takes three parameters – one required and two optional.
- «substring» is the first required parameter. This is the substring you are trying to find inside string_object . Make sure to include quotation marks.
- start_index_number is the second parameter and it’s optional. It specifies the starting index and the position from which the search will start. The default value is 0 .
- end_index_number is the third parameter and it’s also optional. It specifies the end index and where the search will stop. The default is the length of the string.
- Both the start_index_number and the end_index_number specify the range over which the search will take place and they narrow the search down to a particular section.
The return value of the find() method is an integer value.
If the substring is present in the string, find() returns the index, or the character position, of the first occurrence of the specified substring from that given string.
If the substring you are searching for is not present in the string, then find() will return -1 . It will not throw an exception.
How to Use find() with No Start and End Parameters Example
The following examples illustrate how to use the find() method using the only required parameter – the substring you want to search.
You can take a single word and search to find the index number of a specific letter:
I created a variable named fave_phrase and stored the string Hello world! .
I called the find() method on the variable containing the string and searched for the letter ‘w’ inside Hello world! .
I stored the result of the operation in a variable named search_fave_phrase and then printed its contents to the console.
The return value was the index of w which in this case was the integer 6 .
Keep in mind that indexing in programming and Computer Science in general always starts at 0 and not 1 .
How to Use find() with Start and End Parameters Example
Using the start and end parameters with the find() method lets you limit your search.
For example, if you wanted to find the index of the letter ‘w’ and start the search from position 3 and not earlier, you would do the following:
Since the search starts at position 3, the return value will be the first instance of the string containing ‘w’ from that position and onwards.
You can also narrow down the search even more and be more specific with your search with the end parameter:
Substring Not Found Example
As mentioned earlier, if the substring you specify with find() is not present in the string, then the output will be -1 and not an exception.
Is the find() Method Case-Sensitive?
What happens if you search for a letter in a different case?
In an earlier example, I searched for the index of the letter w in the phrase «Hello world!» and the find() method returned its position.
In this case, searching for the letter W capitalized returns -1 – meaning the letter is not present in the string.
So, when searching for a substring with the find() method, remember that the search will be case-sensitive.
The find() Method vs the in Keyword – What’s the Difference?
Use the in keyword to check if the substring is present in the string in the first place.
The general syntax for the in keyword is the following:
The in keyword returns a Boolean value – a value that is either True or False .
The in operator returns True when the substring is present in the string.
And if the substring is not present, it returns False :
Using the in keyword is a helpful first step before using the find() method.
You first check to see if a string contains a substring, and then you can use find() to find the position of the substring. That way, you know for sure that the substring is present.
So, use find() to find the index position of a substring inside a string and not to look if the substring is present in the string.
The find() Method vs the index() Method – What’s the Difference?
Similar to the find() method, the index() method is a string method used for finding the index of a substring inside a string.
So, both methods work in the same way.
The difference between the two methods is that the index() method raises an exception when the substring is not present in the string, in contrast to the find() method that returns the -1 value.
The example above shows that index() throws a ValueError when the substring is not present.
You may want to use find() over index() when you don’t want to deal with catching and handling any exceptions in your programs.
Conclusion
And there you have it! You now know how to search for a substring in a string using the find() method.
I hope you found this tutorial helpful.
To learn more about the Python programming language, check out freeCodeCamp’s Python certification.
You’ll start from the basics and learn in an interactive and beginner-friendly way. You’ll also build five projects at the end to put into practice and help reinforce your understanding of the concepts you learned.