Как разбить строку по одному или нескольким разделителям в Python?
У меня есть форматированная строка из файла журнала, которая выглядит следующим образом:
>>> a="test result"
То есть, слово "test" и "result" разделены пробелами — вероятно, она была создана с использованием форматированной строки, которая задала "test" постоянное расстояние.
На простой разбиении это не сработает:
>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']
Метод split(DELIMITER, COUNT)
убрал некоторые ненужные значения:
>>> a.split(" ", 1)
['test', ' result']
Это помогло, но, конечно, мне действительно нужно получить:
['test', 'result']
Я могу использовать split()
, а затем применить map
с strip()
, но мне интересно, есть ли более питоновский способ сделать это.
Спасибо,
Адам
Обновление: Какое простое решение! Всем спасибо.
5 ответ(ов)
Вы можете использовать метод split()
без аргументов, чтобы разделить строку на слова. Этот метод автоматически уберет все пробелы и вернет список слов. Вот пример:
a = "test result"
result = a.split() # Разделяем строку
print(result) # Вывод: ['test', 'result']
Таким образом, вам не нужно указывать разделитель, так как split()
по умолчанию обрабатывает любые пробелы.
Вы можете использовать как функцию re.split
, так и метод строки split
для разделения строки по пробелам.
Вот пример, который демонстрирует это:
import re
a = "test result"
# Использование re.split для разделения по одному или нескольким пробелам
result_with_re = re.split(" +", a)
print(result_with_re) # ['test', 'result']
# Использование метода split для разделения по пробелам
result_with_split = a.split()
print(result_with_split) # ['test', 'result']
Оба подхода дают одинаковый результат: они разбивают строку на слова, убирая лишние пробелы. Метод split()
более удобен и обычно предпочтителен, если вам нужно просто разделить строку по пробелам, так как он автоматически удаляет лишние пробелы.
Проблем с использованием простого a.split()
может быть несколько, в зависимости от контекста.
Пробелы в строке: Метод
split()
без аргумента разделяет строку по пробелам и удаляет пустые строки из результата. Это значит, что если у вас есть несколько подряд идущих пробелов, они будут проигнорированы, и вы получите меньше элементов, чем ожидали. Например:a = " Hello World " result = a.split() # ['Hello', 'World']
Кастомные разделители: Если вам нужно разделить строку по определенному разделителю (например, запятой или точке с запятой), использование
a.split()
без указания аргумента не подойдет. Вам нужно будет указать разделитель явно:a = "one,two,three" result = a.split(',') # ['one', 'two', 'three']
Тип данных: Если
a
не является строкой (например, у вас список или другой тип данных), вызов методаsplit()
приведет к ошибке. Это нужно учитывать перед использованием метода.Работа с юникодом: В некоторых случаях, если вы работаете с нестандартными символами или юникодом, простое разделение по пробелам может не дать ожидаемого результата.
Таким образом, перед использованием a.split()
всегда полезно подумать о том, как именно вы хотите разделить строку и учитывать возможные нюансы.
Если вам нужно разделить строку по одному или нескольким вхождениям разделителя и стандартный метод split()
с отсутствующими параметрами вам не подходит, вы можете использовать регулярные выражения для совпадения с разделителем. В следующем примере мы используем одно или несколько вхождений символа .
в качестве разделителя:
import re
s = 'a.b....c......d.ef...g'
sp = re.compile(r'\.+').split(s)
print(sp)
Это даст следующий результат:
['a', 'b', 'c', 'd', 'ef', 'g']
Таким образом, результатом будет список строк, разделенный по всем вхождениям .
.
Добавлю еще один способ, который может быть полезен в случаях, когда разделитель отличается от пробела, и метод s.split()
не сработает.
Например, если у нас есть строка с разделителем запятая:
s = "Python,is,,more,,,,,flexible"
Можно использовать функцию filter()
в сочетании с lambda
, чтобы удалить пустые строки из результата:
str_list = list(filter(lambda x: len(x) > 0, s.split(",")))
Таким образом, получим желаемый список строк без пустых элементов:
print(str_list)
# Вывод: ['Python', 'is', 'more', 'flexible']
Этот подход особенно полезен, когда у вас есть много последовательных разделителей, и вы хотите избежать наличия пустых строк в конечном результате.
Разделить строку с несколькими разделителями в Python
Разделить строку по пробелам в Python
Разделение строк на слова с использованием нескольких разделителей границ слов
Разделить строку по запятым, игнорируя запятые внутри двойных кавычек?
Диапазон букв в Python