Полное руководство по разделению строк в языке Python

Раздел: Основы Python -> Строки

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

Разделение строк в Python: основные методы

Наиболее универсальным и часто используемым инструментом является метод split() класса str. Он позволяет разбить строку по заданному разделителю и возвращает список фрагментов. Если разделитель не указан, разбиение происходит по любому количеству пробельных символов (пробелы, табуляции, переводы строк).

text = "яблоко, банан, вишня"
result = text.split(", ")
print(result)  # ['яблоко', 'банан', 'вишня']

Python strip (метод strip в python)

Метод split() принимает также необязательный аргумент maxsplit, ограничивающий количество разбиений. Это удобно, когда нужно сохранить оставшуюся часть строки нетронутой.

Частая ошибка - путать разделитель с регулярным выражением. split() не поддерживает регулярные выражения, для этого используется re.split(). Также стоит помнить, что при указании разделителя пустые строки в начале или конце строки не отбрасываются, а попадают в результат.

Как разбить строку по всем пробельным символам независимо от их количества?

Использование split() без аргументов автоматически обрабатывает множественные пробелы и удаляет пустые строки.

text = "яблоко   банан\tвишня\n"
result = text.split()
print(result)  # ['яблоко', 'банан', 'вишня']

Python повторить строку (повторение строки в python)

Как разделить многострочный текст на строки?

Метод splitlines() разбивает строку по различным символам перевода строки и возвращает список строк без самих символов перевода. Можно сохранить символы перевода, передав аргумент keepends=True.

multiline = "строка1\nстрока2\r\nстрока3"
lines = multiline.splitlines()
print(lines)  # ['строка1', 'строка2', 'строка3']

Tuple в str python (преобразование кортежа в строку в python)

Ошибка: использовать split('\n') для строк с разными типами концов строк (Windows, Unix). Это приведёт к некорректному разбиению. splitlines() решает эту проблему.

Как разделить строку по сложному шаблону, например по знакам пунктуации?

Метод re.split() из модуля re принимает регулярное выражение в качестве разделителя и позволяет гибко разбивать строку.

import re
text = "яблоко, банан! вишня? апельсин"
pattern = r"[,\s!?]+"
result = re.split(pattern, text)
print(result)  # ['яблоко', 'банан', 'вишня', 'апельсин']

Python объект в строку (преобразование объекта в строку в python)

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

Как разделить строку на части фиксированной длины, например по N символов?

Встроенная функция textwrap.wrap() разбивает на слова, а для точного деления по символам применяется срез в цикле или использование re.findall() с шаблоном .{N}.

import re
text = "1234567890abcdef"
chunks = re.findall(r".{4}", text)
print(chunks)  # ['1234', '5678', '90ab', 'cdef']

Python convert string (преобразование строк в python)

Нехватка символов в конце: re.findall не включает остаток. Для включения последнего неполного куска нужно использовать другой подход.

Как разделить строку на две части по первому вхождению разделителя?

Методы partition() и rpartition() возвращают кортеж из трёх элементов: часть до разделителя, сам разделитель, часть после. Если разделитель не найден, первый элемент - вся строка, остальные пустые.

text = "имя:значение:доп"
result = text.partition(":")
print(result)  # ('имя', ':', 'значение:доп')

Не стоит путать partition с split: partition всегда делит на две части, сохраняя разделитель. Если разделитель встречается несколько раз, он использует только первое вхождение.

- вывести символ строки python (вывод символа строки в python)
- вывести длину строки python (вывести длину строки в python)
- вывести элемент строки python (вывод конкретного символа строки по индексу в python)

Расширенные примеры разделения строк

Ниже приведены более сложные и менее распространённые сценарии, которые могут возникнуть при обработке текстов.

Разделение строки с разными разделителями и их комбинациями

Пример
import re
text = "один; два, три | четыре   пять"
# разделители: точка с запятой, запятая, вертикальная черта, один или более пробелов
pattern = r"[;,\|]|\s+"
result = re.split(pattern, text)
print(result)
# ['один', '', 'два', 'три', '', 'четыре', 'пять']
['один', '', 'два', 'три', '', 'четыре', 'пять']

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

Пример
result_clean = [x for x in result if x]
print(result_clean)  # ['один', 'два', 'три', 'четыре', 'пять']

Разделение с сохранением разделителя в результате

Если нужно сохранить сам разделитель, например разбить строку по запятой, но оставить запятые в блоках, можно использовать re.findall с шаблоном, захватывающим разделитель:

Пример
import re
text = "a,b,c"
# шаблон: разделитель (запятая) и следующий за ним символ, но не конец строки
parts = re.split(r'(,)', text)
print(parts)  # ['a', ',', 'b', ',', 'c']
['a', ',', 'b', ',', 'c']

Группировка в регулярном выражении заставляет re.split включать захваченный разделитель в результат. Этот приём удобен для последующей сборки.

Разделение многострочного текста с обработкой переносов и пустых строк

Пример
text = """строка1

строка2
строка3
"""
# splitlines с keepends=False удаляет символы перевода, но оставляет пустые строки
lines = text.splitlines(keepends=False)
print(lines)  # ['строка1', '', 'строка2', 'строка3']
# Удаление пустых строк
lines_nonempty = [line for line in lines if line]
print(lines_nonempty)  # ['строка1', 'строка2', 'строка3']
['строка1', '', 'строка2', 'строка3']
['строка1', 'строка2', 'строка3']

Метод splitlines() корректно обрабатывает как \n, так и \r\n, что упрощает переносимость кода.

Разделение строки по длине чанков (с учётом остатка)

Пример
import re
text = "ABCDEFGHIJK"
chunk_size = 4
# Шаблон: {1,4} - от 1 до 4 символов, чтобы включить неполный последний кусок
chunks = re.findall(rf".{{1,{chunk_size}}}", text)
print(chunks)  # ['ABCD', 'EFGH', 'IJK']
['ABCD', 'EFGH', 'IJK']

Использование re.findall с диапазоном позволяет получить все куски, включая хвост, меньший заданной длины. Если фиксированный размер обязателен, можно дополнить строку символами до кратности.

Разделение URL на компоненты с сохранением структуры

Пример
from urllib.parse import urlsplit
url = "https://user:pass@example.com:8080/path?key=val#frag"
parts = urlsplit(url)
print(parts.scheme)   # https
print(parts.netloc)   # user:pass@example.com:8080
print(parts.path)     # /path
print(parts.query)    # key=val
print(parts.fragment) # frag
https
user:pass@example.com:8080
/path
key=val
frag

Для разбиения сложно структурированных данных (URL, параметры запроса) лучше использовать специализированные модули, а не общие методы.

Разбивка на слова с учётом знаков препинания (без потери символов)

Пример
import re
text = "Привет, мир! Как дела?"
# Шаблон: буквы и апострофы (для английского) или символы, не являющиеся разделителями
words = [w for w in re.split(r"[,\s!?.]+", text) if w]
print(words)  # ['Привет', 'мир', 'Как', 'дела']
['Привет', 'мир', 'Как', 'дела']

Для русского языка можно добавить букву ё. Более точный подход - использовать re.findall с шаблоном \w+ или [а-яА-ЯёЁa-zA-Z]+.

Разделение строк в Python - comments

En
Python разделить (python)