Определение позиции символа в строке: Python способы индексации
Номер символа в строке Python: способы получения индекса
Наиболее часто используемый способ найти номер (индекс) первого вхождения символа или подстроки в строке - метод find(). Он возвращает индекс начала совпадения или -1, если элемент не найден. Это безопаснее, чем index(), который при отсутствии символа выбрасывает исключение ValueError.
text = 'Привет, мир!'
position = text.find('м')
print(position) # 8Python strip (метод strip в python)
8
Python повторить строку (повторение строки в python)
Если требуется найти символ, которого заведомо нет, find() не прерывает выполнение программы:
text = 'Python'
pos = text.find('z')
print(pos) # -1
Tuple в str python (преобразование кортежа в строку в python)
-1
Python объект в строку (преобразование объекта в строку в python)
Частая ошибка - путать методы find() и index(). Если символ отсутствует, index() вызовет исключение. Для проверки наличия символа перед index() следует использовать оператор in:
text = 'abc'
if 'd' in text:
print(text.index('d'))
else:
print('Символ не найден')Python convert string (преобразование строк в python)
Как найти все вхождения символа в строке?
Для получения списка индексов всех вхождений символа удобно использовать генератор списка вместе с enumerate():
text = 'hello world'
symbol = 'l'
indices = [i for i, c in enumerate(text) if c == symbol]
print(indices) # [2, 3, 9]Python str to bytes (преобразование строки в байты в python)
[2, 3, 9]
функция разделить python (разделение строки на список в python)
Как найти номер символа, начиная с конца строки?
Методы rfind() и rindex() ищут последнее вхождение подстроки. Они возвращают индекс с начала строки, но находят самую правую позицию:
text = 'abracadabra'
print(text.rfind('a')) # 10
print(text.rindex('a')) # 10вывести первый символ строки python (вывести первый символ строки в python)
10
вывести символ строки python (вывод символа строки в python)
Как получить порядковый номер (1‑индексация) символа?
Простым сложением единицы к найденному индексу:
idx = 'Python'.find('y')
number = idx + 1
print(number) # 2вывести длину строки python (вывести длину строки в python)
2
вывести элемент строки python (вывод конкретного символа строки по индексу в python)
Как использовать регулярные выражения для сложного поиска?
Модуль re позволяет находить индексы по шаблону. Метод search() возвращает объект Match с атрибутом start():
import re
text = 'Цена: 100 рублей'
match = re.search(r'\d+', text)
if match:
print(match.start()) # 6задания на строки python (задания на строки в python)
6
замена символов python (замена символов в строке python)
Для поиска всех совпадений используется finditer():
indices = [m.start() for m in re.finditer(r'а', 'как дела?')]
print(indices) # [0, 4, 6]Python первое слово в строке (извлечение первого слова из строки в python)
[0, 4, 6]
Расширенные примеры работы с номерами символов
Поиск индексов всех символов с определённым условием
Пример находит позиции всех гласных букв в строке:
text = 'Программирование на Python'
vowels = set('аеёиоуыэюяAEIOU')
positions = [i for i, c in enumerate(text) if c.lower() in vowels]
print(positions)[0, 4, 5, 10, 11, 13, 14, 15, 17, 20, 22]
Поиск индекса с учётом регистра
Метод find() чувствителен к регистру. Для регистронезависимого поиска обе строки приводятся к одному регистру:
text = 'Hello, World!'
symbol = 'h'
pos = text.lower().find(symbol.lower())
print(pos) # 00
Поиск номера символа в подстроке (срез)
Можно искать символ только в ограниченной части строки, указав параметры start и end:
text = 'abcdefgh'
pos = text.find('c', 2, 5) # поиск от индекса 2 до 5
print(pos) # 22
Обработка многобайтовых символов (Unicode)
Строки Python хранят кодовые точки Unicode, поэтому индекс символа соответствует позиции кодовой точки, а не байта. Для работы с байтовыми строками используется bytes:
text = 'Привет'
b_text = text.encode('utf-8')
print(b_text) # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
pos_byte = b_text.find(b'\xd0\xb8') # поиск байтовой последовательности
print(pos_byte) # 4 (байт-индекс)b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' 4
Ручной перебор с помощью while
Иногда полезен классический цикл для поиска всех вхождений с контролем сдвига:
text = 'aaa'
symbol = 'a'
start = 0
indices = []
while True:
pos = text.find(symbol, start)
if pos == -1:
break
indices.append(pos)
start = pos + 1
print(indices) # [0, 1, 2][0, 1, 2]
Использование str.index() с обработкой исключения
Если необходимо получить индекс, но при отсутствии символа выполнить альтернативное действие:
text = 'abc'
try:
i = text.index('d')
print(i)
except ValueError:
print('Символ не найден')Символ не найден
Поиск индекса нескольких символов сразу
Использование any() с find() для проверки наличия любого из символов:
text = 'Python'
chars = ['x', 'y', 'z']
found = [c for c in chars if text.find(c) != -1]
print(found) # ['y', 'x']['y', 'x']
Получение номера символа по его порядку (ord)
Путаница: номер символа в Unicode (код) и индекс в строке - разные понятия. Для кода используется ord():
char = 'A'
unicode_code = ord(char)
print(unicode_code) # 6565
Не следует смешивать это с поиском индекса.