Разделение строки на определенные символы

#python #string #split

#python #строка #разделение

Вопрос:

У меня есть строка, подобная;

 '[abc] [def] [zzz]'
 

Как я мог бы разделить его на три части:

 abc
def
zzz
 

Комментарии:

1. Удалите скобки из строки, а затем выполните обычное разделение на пробелы.

2. Ах, но что, если следующая строка '[abc def] [zzz]' ?

Ответ №1:

Вы можете использовать re.findall :

 >>> from re import findall
>>> findall('[([^]]*)]', '[abc] [def] [zzz]')
['abc', 'def', 'zzz']
>>>
 

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

 [      # [
(       # The start of a capture group
[^]]*  # Zero or more characters that are not ]
)       # The end of the capture group
]      # ]
 

Для тех, кто хочет решение без регулярных выражений, вы всегда можете использовать понимание списка и str.split :

 >>> [x[1:-1] for x in '[abc] [def] [zzz]'.split()]
['abc', 'def', 'zzz']
>>>
 

[1:-1] снимите квадратные скобки с каждого конца x .

Комментарии:

1. Использование [^]]* вместо .*? значительно быстрее (я вижу улучшение в 3 раза с более длинными группами и строками) (понимание списка в любом случае кажется самым быстрым …)

Ответ №2:

Другой способ:

 s = '[abc] [def] [zzz]'
s = [i.strip('[]') for i in s.split()]
 

Комментарии:

1. зачем вам нужно указывать ' ' в разделении?