2012-06-11 4 views
67

У меня есть вывод команды в табличной форме. Я разбираю этот результат из файла результата и сохраняю его в строке. Каждый элемент в одной строке разделяется одним или несколькими пробельными символами, поэтому я использую регулярные выражения, чтобы соответствовать 1 или более пробелам и разбивать их. Однако между каждым элементом вставлено пространство:Сплит-строка на основе регулярного выражения

>>> str1="a b  c  d" # spaces are irregular 
>>> str1 
'a b  c  d' 
>>> str2=re.split("()+", str1) 
>>> str2 
['a', ' ', 'b', ' ', 'c', ' ', 'd'] # 1 space element between!!! 

Есть ли лучший способ сделать это?

После каждого раскола str2 прилагается к списку.

+0

Я отклонил этот вопрос. Причина в том, что, хотя сам вопрос имеет значение, данный пример не является достаточно сложным, чтобы действительно требовать запрошенного решения. Регулярное выражение потребуется, если у вас есть, например, блоки слов, блоки чисел и вы хотите разделить их на разные переменные. – erikbwork

+0

@erikbwork Я хотел удалить ненужный элемент пространства в результирующей строке ''str2'' – user2763554

+0

Да, и вы можете добиться этого простым использованием' str1.split() '. Нет необходимости в регулярном выражении. – erikbwork

ответ

95

Используя (, ), вы захватив группу, если вы просто удалите их вам не будет этой проблемы.

>>> str1 = "a b  c  d" 
>>> re.split(" +", str1) 
['a', 'b', 'c', 'd'] 

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

>>> str1.split() 
['a', 'b', 'c', 'd'] 

Если вы действительно хотите Regex вы можете использовать это ('\s' представляет собой пустое пространство, и это понятнее):

>>> re.split("\s+", str1) 
['a', 'b', 'c', 'd'] 

или вы можете найти все непробельных символов

>>> re.findall(r'\S+',str1) 
['a', 'b', 'c', 'd'] 
+0

Спасибо .... Все три ответа сработали !!! но какой из них лучше? – user2763554

+3

Держите его простым. 'str.split', безусловно, лучший: D – jamylak

+0

Как это использовать, если у меня есть строка, которая начинается и заканчивается withspace. Пример: 'a b c de'. Для этого вывод получается как «['', 'a', 'b', 'c', 'de', '']' –

5

Когда вы используете re.split, а шаблон разделения содержит группы захвата, группы сохраняются на выходе. Если вы этого не хотите, используйте вместо него группу, не связанную с захватом.

+0

Спасибо .... Все три ответа работали !!! но какой из них лучше? – user2763554

+1

Использование 'str.split', вероятно, лучше для вашего примера. Я просто хотел объяснить, почему вы выполняете свое поведение. – BrenBarn

13

Метод str.split автоматически удаляет все пробелы между элементами:

>>> str1 = "a b  c  d" 
>>> str1.split() 
['a', 'b', 'c', 'd'] 

Docs здесь: http://docs.python.org/library/stdtypes.html#str.split

+0

Спасибо .... Все три ответа сработали !!! но какой из них лучше? – user2763554

+0

@ GururajY.S .: 'str.split()', вероятно, лучший выбор для чего-то столь же легкого, как это. –

1

Его очень простой на самом деле. Попробуйте следующее:

str1="a b  c  d" 
splitStr1 = str1.split() 
print splitStr1 
+1

Я бы добавил +1, но вы используете уродливые полуколоны. – jamylak

+3

@jamylak Lol. Я изменю их. :) Привычка использовать java и python! – damned

+0

Спасибо .... Все три ответа работали !!! но какой из них лучше? – user2763554

Смежные вопросы