Python разбор строки: Как разделить строку в Python методом str.split(), примеры с пробелом, запятой и регулярными выражениями

Как разделить строку в Python методом str.split(), примеры с пробелом, запятой и регулярными выражениями

Строки — отличный инструмент в руках Python-разработчиков. В Python строка —
это последовательность символов в кавычках. Она может включать числа, буквы и
символы. С помощью Python строку можно разделить на список подстрок по
определенному разделителю. Это делается с помощью метода split.

В этом материале разберем особенности его использования.

Что делает split в Python?

Функция split сканирует всю строку и разделяет ее в случае нахождения разделителя.
В строке должен быть как минимум один разделитель. Им может выступать в том
числе и символ пробела. Пробел — разделитель по умолчанию.

Если параметр на задать, то разделение будет выполнено именно по символу
пробела.

Синтаксис функции следующий:

string.split(separator*, maxsplit*)

Параметр separator — необязательный, но он позволяет задать разделитель
вручную.

Параметр maxsplit определяет максимальное количество разделений. Значение по
умолчанию — -1, будут выполнены все разделения.

Как разделить строку в Python

Метод .split() разделяет основную строку по разделителю и возвращает список строк.

Копировать Скопировано Use a different Browser

my_st = "Пример строки Python"
print(my_st.split())

В примере выше была объявлена строка

my_st. Она помещена в одинарные кавычки. Функция .split() разделяет ее на список таких строк:

['Пример', 'строки', 'Python']

Вывод содержит список подстрок.

Еще один пример разбиения строки:

Копировать Скопировано Use a different Browser

my_st = "синий,оранжевый,красный"
print(my_st.split(","))

В приведенном выше примере мы создали строку my_st с 3 подстроками. В этом случае именно запятая выступит параметром разделения в функции. Вывод будет следующий:

['синий', 'оранжевый', 'красный']

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

Разделение сроки по пробелу

Если не передать параметр разделителя, то .split() выполнит разделение по пробелу.

Копировать Скопировано Use a different Browser

my_st = "Пример строки Python"
print(my_st.split())

Код вернет:

['Пример', 'строки', 'Python'].

Обратите внимание, что мы не указали разделитель, который нужно использовать при вызове функции .split(), поэтому в качестве разделителя используется пробел.

Разделение строки по запятой

Разделителем может выступать запятая (","). Это вернет список строк, которые
изначально были окружены запятыми.

Копировать Скопировано Use a different Browser

my_st = "Например, строка Python"
print(my_st.split(","))

Вывод: ['Например', ' строка Python']. Результатом является список подстрок, разделенных по запятым в исходной строке.

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

В Python можно использовать даже несколько разделителей. Для этого просто требуется передать несколько символов в качестве разделителей функции split.

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

: и ,. Задействуем функцию re.split().

Копировать Скопировано Use a different Browser

import re
my_st = "Я\nучу; язык,программирования\nPython"
print(re.split(";|,|\n", my_st))

Вывод:

['Я', 'учу', ' язык', 'программирования', 'Python']

Здесь мы используем модуль re и функции регулярных выражений. Переменной my_st была присвоена строка с несколькими разделителями, включая «\n», «;» и «,». А функция re.split() вызывается для этой строки с перечисленными выше разделителями.

Вывод — список подстрок, разделенных на основе оригинальной строки.

Как работает параметр maxsplit в функции split?

Этот параметр помогает задать максимальное число разделений. Разделить стоку можно, передав значение этого параметра. Например, если разделителем выступает символ пробела, а значение

maxsplit1,
то строка будет разделена максимум на 2 подстроки.

Копировать Скопировано Use a different Browser

languages = "Python,Java,Perl,PHP,Swift"
print(languages.split(",",1))

В строке languages хранится строка с перечислением разных языков. Функция split принимает запятую в качестве разделителя и значение 1 для параметра maxsplit. Это значит, что разделение будет выполнено только один раз.


['Python', 'Java,Perl,PHP,Swift']

Следующий пример показывает, как выполнить разделение два раза. Здесь разделителем выступает пробел, а значение maxplit равно 2.

Копировать Скопировано Use a different Browser

languages = "Python,Java,Perl,PHP,Swift"
print(languages. split(",",2))
['Python', 'Java', 'Perl,PHP,Swift']

Как разделить строку посередине

Функция .split() не может разбить строку на две равных части.
Однако для этого можно использовать срезы (оператор :) и функцию len().

Копировать Скопировано Use a different Browser

languages = "Python,Java,Perl,PHP,Swift"
mean_index = len(languages) // 2
print(f"Первая половина: {languages[:mean_index]}")
print(f"Вторая половина: {languages[mean_index:]}")

Вывод:

Первая половина: Python,Java,P
Вторая половина: erl,PHP,Swift

Значение languages было разбито на две равных части. Для работы был использован оператор целочисленного деления.

Вывод

Вот что вы узнали:

  • Функция split разбивает строку на подстроки по разделителю.
  • Параметр maxsplit позволяет указать максимально количество разделений.
  • Если разделитель не задать, то по умолчанию будет выбрано значение пробела.
  • Срезы используются для деления строк на равные части.

python — Разбор строки на части

Вопрос задан

Изменён 5 лет 3 месяца назад

Просмотрен 6k раза

Здравствуйте, посылаю в питон строку вида

&5:420:0:03713031464@

Которую надо разобрать на следующие части

(start byte) (data length) : (type of message) (priority) (data1) : (data2): (data3) (CRC) (end byte)

При этом длина данных(data length), собственно сами данные ((data1) : (data2): (data3)) и (CRC) имеют динамическую длину.

Собственно вопрос, как правильно разобрать такую строку(данные всегда приходят в виде x:x:x)? Пытался составить регулярное выражение, ничего не вышло. Спасибо.

  • python
  • строки
  • парсер
1

print "&5:420:0:03713031464@".split(":")

На выходе будет [‘&5’, ‘420’, ‘0’, ‘03713031464@’] — почти то что вам нужно. Убираете первый символ первого элемента списка и последний последнего и вот результат.

3

а разбить строку в массив, используя в качестве разделителя двоеточие:

//data - приходящая строка
arr = data.split(':')
print('\n'.join(arr))

Проблема может быть решена изменением транспорта данных извне. Из всего вышеописаного выходит что контрольная сумма переведена в десятичные числа. Попробуйте, если это возможно, изменить транспорт данных. Если нет — то приведите это к шеснадцатитричному виду.

3

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

regex — Разобрать строку в python

спросил

Изменено 10 месяцев назад

Просмотрено 16 тысяч раз

Я хотел бы превратить это:

 mystr = 'foo1 (foo2 foo3 (foo4))'
 

в:

 ['foo1','foo2 foo3 (foo4)']
 

Итак, в основном мне приходится разбивать на количество пробелов/табуляций и круглых скобок.

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

Что было бы лучшим, самым питоническим и простым подходом?

  • питон
  • регулярное выражение
7

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

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

 mystr = 'foo1 (foo2 foo3 (foo4))'
mystr = mystr.strip()
я = mystr.index(' ')
a = mystr[:i].strip()
b = mystr[i:].strip()[1:-1]
распечатать ([а, б])
 

с выводом

 ['foo1', 'foo2 foo3 (foo4)']
 

Хотя мне до сих пор не совсем ясно, нужно ли вам это. Дайте мне знать, если это работает или что нужно изменить.

3

Если структура вашей строки так жестко определена, как вы говорите, вы можете использовать регулярное выражение для ее довольно легкого разбора:

 импорт повторно
mystr = 'foo1 (foo2 foo3 (foo4))'
шаблон = r'(\S+)\s+\((.
*)\)' match = re.search(шаблон, mystr) results = match.groups() # ('foo1', 'foo2 foo3 (foo4)')

Будьте осторожны с этим подходом, если ваш реальный вклад не так хорошо определен, как вы предложили свой вопрос. Регулярные выражения могут анализировать только обычные языки, а скобки обычно работают не так, как обычно. В этом вопросе вы заботились только об обработке скобок с одним набором (самых внешних), поэтому работает простое жадное совпадение. Адаптировать это решение к другим форматам ввода может быть сложно или даже невозможно, даже если они кажутся очень похожими!

 [mystr.split(' ')[0].strip(),mystr.split(' ')[1][1:-1]]
 

Простой однострочный. Вывод:

 ['foo1', 'foo2 foo3 (foo4)']
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Python, анализ строки путем извлечения подстроки символов и цифр

спросил

Изменено 1 год, 7 месяцев назад

Просмотрено 2к раз

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

Примерно так

первое_слово 3 5 7 @ 4
второе_слово 4 5 67| 5 [
 

Мне нужно извлечь 2 слова и числовые символы.

Я могу удалить пустые строки, выполнив что-то вроде:

 lines_list = initial_string. split("\n")
для строки в lines_list:
    если len(line) > 0, а не line.isspace():
        печать (строка)
 

но теперь мне интересно:

  1. если есть более надежный, общий способ
  2. как разобрать каждую из оставшихся 2 центральных строк, извлекая слова и цифры (и отбрасывая другие символы, смешанные между цифрами, если они есть)

Я полагаю, что reg-выражения могут быть полезны, но я никогда ими не пользовался, поэтому сейчас немного борюсь

  • python
  • string
  • text-parsing
1

Здесь я бы использовал re.findall:

 inp = '''first_word 3 5 7 @ 4
второе_слово 4 5 67| 5 ['''
совпадения = re.findall(r'\w+', inp)
print(matches) # ['first_word', '3', '5', '7', '4', 'second_word', '4', '5', '67', '5']
 

Если вы хотите обрабатывать каждую строку отдельно, просто разделите ввод на CR?LF и используйте тот же подход:

 inp = '''first_word 3 5 7 @ 4
второе_слово 4 5 67| 5 ['''
строки = inp.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *