Разделение строки Python по последнему разделителю: mysplit

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Задача разделения строки в Python может показаться схожей с попыткой ухватиться за хвост ускользающей змеи. Вот как это сделать с помощью функции rsplit():

Python
Скопировать код
text = "a,b,c,d"
# Обрезаем с конца!
before, after = text.rsplit(',', 1)
print(before)  # 'a,b,c'
print(after)   # 'd'

Данный метод разделяет строку на две части: все до последнего разделителя остаётся в подстроке слева, а все после — в подстроке справа. Таким образом, мы "ловим хвост".

Кинга Идем в IT: пошаговый план для смены профессии

Обработка краевых случаев

Если вы планируете активно использовать rsplit(), помните о возможных краевых случаях:

  • В случае отсутствия разделителя в строке, rsplit() вернёт список только с одним элементом — этой самой строкой:
Python
Скопировать код
text = "abc"
# Разделители отсутствуют 🏜️
parts = text.rsplit(',', 1)  # ['abc']
  • Если в конце строки стоит разделитель, rsplit() вернёт пустую строку как последний элемент:
Python
Скопировать код
text = "a,b,c,"
# разделитель находится в конце!
before, after = text.rsplit(',', 1)
print(after == '')  # True, мы обнаружили пустую подстроку!

В этих случаях рекомендуется написать функцию, которая достаточно аккуратно избавится от нежелательного хвостового разделителя перед выполнением разделения строки.

Что делать, если разделитель отсутствует?

Если в строке не обнаруживается разделитель, стоит воспользоваться функцией str.rpartition(). Она всегда возвращает кортеж из трёх элементов: подстроку перед последним разделителем, сам разделитель и подстроку после него. Без исключений!

Python
Скопировать код
text = "a,b,c"
# Посмотрим на результат
before, delimiter, after = text.rpartition(',')
print(before)  # 'a,b'
print(after)   # 'c'

Даже при отсутствии разделителя rpartition() вернёт кортеж, первым элементом которого будет пустая строка.

Обработка хвостового разделителя

Если хвостовой разделитель мешает планам, его можно убрать с помощью определённой пользовательской функции:

Python
Скопировать код
def split_last_delimiter(text, delimiter):
  # Удаляем ненужный хвост, если он имеется
  if text.endswith(delimiter):
    text = text[:-len(delimiter)]
  # Теперь можно без проблем разделить строку
  return text.rsplit(delimiter, 1)

Эта функции сначала проверяет, присутствует ли разделитель в конце, и аккуратно удаляет его, после чего проводит разделение.

Визуализация

Представим себе поезд:

Markdown
Скопировать код
🚂 === Данные|Наука|Искусственный|Интеллект

Нам необходимо выйти на последней станции:

Python
Скопировать код
# Следующая станция — конечная!
last_station_split = train.rsplit('|', 1)

Поезд отделится по разделителю:

Markdown
Скопировать код
До: 🚂 === Данные|Наука|Искусственный|Интеллект
После: 🚂 === Данные|Наука|Искусственный 🛤️ Интеллект

Мы успешно добрались до последней станции, то есть до последнего разделителя!

Реверсивная обработка: требуется внимательность!

Перевернутые строки с помощью str[::-1] могут вас очаровать, но будьте аккуратны: Unicode и многобайтовые символы могут стать неожиданными препятствиями. Для обеспечения безопасности при работе с концом строки лучше использовать rsplit() и rpartition(). С их помощью можно избежать сюрпризов.

Полезные материалы

  1. Метод строки Python rsplit() — подробное рассмотрение метода rsplit().
  2. Встроенные типы — документация Python 3.12.2 — официальная документация Python по работе со строками.
  3. Метод строки Python rpartition() – GeeksforGeeks — обозрение возможностей метода rpartition().
  4. Разделение, конкатенация и соединение строк в Python – Real Python — детальное обсуждение темы работы со строками в Python.
  5. Примеры разделения строк в Python – Dot Net Perls — практические примеры работы с методами разделения строк в Python.