Как я могу разделить на 1 или более вхождений разделителя в Python? - PullRequest
27 голосов
/ 22 марта 2010

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

>>> a="test                            result"

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

Простое разбиение не сработает:

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

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

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

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

['test', 'result']

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

Спасибо

Адам

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

Ответы [ 6 ]

49 голосов
/ 22 марта 2010

Просто не дают делимера?

>>> a="test                            result"
>>> a.split()
['test', 'result']
31 голосов
/ 22 марта 2010
>>> import re
>>> a="test                            result"
>>> re.split(" +",a)
['test', 'result']

>>> a.split()
['test', 'result']
18 голосов
/ 22 марта 2010

Просто это должно работать:

a.split()

Пример:

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

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

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

4 голосов
/ 22 марта 2010

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

1 голос
/ 17 августа 2018

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

s = 'a.b....c......d.ef...g'
sp = re.compile('\.+').split(s)
print(sp)

, что дает:

['a', 'b', 'c', 'd', 'ef', 'g']
0 голосов
/ 22 августа 2017

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

like str = "Python, является, более ,,,, гибким".

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']
...