Подтвердить что ты не робот

Python: Разделить на 1 или более вхождения разделителя

У меня есть форматированная строка из файла журнала, которая выглядит так:

>>> a="test                            result"

То есть, тест и результат разбиваются на некоторые пробелы - вероятно, он был создан с использованием форматированной строки, которая давала test некоторое постоянное расстояние.

Простое разделение не будет делать трюк:

>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']

split(DELIMITER, COUNT) очистили некоторые ненужные значения:

>>> a.split(" ",1)
['test', '                           result']

Это помогло - но, конечно, мне действительно нужно:

['test', 'result']

Я могу использовать split(), за которым следует map + strip(), но я задавался вопросом, есть ли у него более Pythonic способ сделать это.

Спасибо,

Адам

ОБНОВЛЕНИЕ: Такое простое решение! Спасибо всем.

4b9b3361

Ответ 1

Просто не давайте никакого измерителя?

>>> a="test                            result"
>>> a.split()
['test', 'result']

Ответ 2

>>> import re
>>> a="test                            result"
>>> re.split(" +",a)
['test', 'result']

>>> a.split()
['test', 'result']

Ответ 3

Только это должно работать:

a.split()

Пример:

>>> 'a      b'.split(' ')
['a', '', '', '', '', '', 'b']
>>> 'a      b'.split()
['a', 'b']

В документации :

Если sep не указан или None, применяется другой алгоритм разделения: пробеги последовательного пробела рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или конце, если строка имеет ведущую или конечную пробельные. Следовательно, разделение пустой строки или строки, состоящей из простого пробела с разделителем None, возвращает [].

Ответ 4

Любая проблема с простым a.split()?

Ответ 5

Просто добавив еще один способ, более полезный в случаях, когда разделитель отличается от пространства, а s.split() не будет работать.

как str = "Python, is, more,,, flexible".

In [27]: s = "Python is   more      flexible"

In [28]: str_list = list(filter(lambda x: len(x) > 0, s.split(" ")))

In [29]: str_list
Out[29]: ['Python', 'is', 'more', 'flexible']