2014-11-05 107 views
0

我有一个这样的字符串=如何在python中用多个分隔符分割一个字符串?

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

我想所有的值拆分在此字符串来得到这样一个结果:

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

是否有可能与分割这样的字符串多于一个分隔符?

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

非正则表达式的解决方案使用itertools.groupby

回答

7

您可以使用正则表达式

>>> 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', ')'] 
相关问题