2014-11-05 2 views
0

У меня есть строка, как это =Как разбить строку с несколькими разделителями в python?

str = (((MY (NAME IS) IS) YOUR NAME) 

Я хочу, чтобы разделить все значения в этой строке, чтобы получить результат, как этот:

lst = ['(', '(', '(', 'MY', '(', 'NAME', 'IS', ')', 'IS', ')', 'YOUR', 'NAME', ')'] 

Можно ли разбить строку, как это с более одного разделителя?

ответ

7

Вы можете использовать регулярное выражение:

>>> import re 
>>> s = '(((MY (NAME IS) IS) YOUR NAME)' 
>>> re.findall(r'[()]|[a-zA-Z]+', s) 
['(', '(', '(', 'MY', '(', 'NAME', 'IS', ')', 'IS', ')', 'YOUR', 'NAME', ')'] 

Не-регулярное выражение решения с использованием itertools.groupby:

>>> from itertools import groupby 
>>> def solve(s): 
    for k, g in groupby(s, str.isalpha): 
     if k: 
      yield ''.join(g) 
     else: 
      for x in g: 
       if not x.isspace(): 
        yield x 
...      
>>> list(solve(s)) 
['(', '(', '(', 'MY', '(', 'NAME', 'IS', ')', 'IS', ')', 'YOUR', 'NAME', ')'] 
Смежные вопросы