2014-01-18 63 views
6

我想用多个分隔符分割一个字符串,但在结果列表中保留分隔符。我认为这是解析任何一种公式的第一步,而且我怀疑有一个很好的Python解决方案。Python:我如何在字符串拆分中包含分隔符?

有人问了一个类似的问题在Java here

例如,一个典型的分裂看起来是这样的:

>>> s='(twoplusthree)plusfour' 
>>> s.split(f, 'plus') 
['(two', 'three)', 'four'] 

但是我正在寻找一个很好的方式来添加加回(或保留它):

['(two', 'plus', 'three)', 'plus', 'four'] 

最终我想为每个运营商和支架做到这一点,所以如果有一种方法可以获得

['(', 'two', 'plus', 'three', ')', 'plus', 'four'] 

所有在一个去,然后al我越好越好

回答

11

你可以用Python的re模块做到这一点。

import re 
s='(twoplusthree)plusfour' 
list(filter(None, re.split(r"(plus|[()])", s))) 

如果你只需要一个迭代器,你可以忽略列表。

4
import re 
s = '(twoplusthree)plusfour' 
l = re.split(r"(plus|\(|\))", s) 
a = [x for x in l if x != ''] 
print a 

输出:

['(', 'two', 'plus', 'three', ')', 'plus', 'four'] 
3

下面是使用re.split一种简单的方法:

import re 

s = '(twoplusthree)plusfour' 
re.split('(plus)', s) 

输出:

['(two', 'plus', 'three)', 'plus', 'four'] 

re.splitstring.split非常相似,只不过是传递正则表达式模式的文字分隔符。这里的诀窍是将模式放在模式中,以便将其作为一个组进行提取。

记住,你必须空字符串,如果有定界符模式的两个连续occurrencies

0

这个线程是旧的,但由于它的顶部谷歌的结果我想添加此的:

如果你不想使用正则表达式有一个更简单的方法来做到这一点。基本上只是打电话拆分,但放回分隔符除了最后一个标记

def split_keep_deli(string_to_split, deli): 
    result_list = [] 
    tokens = string_to_split.split(deli) 
    for i in xrange(len(tokens) - 1): 
     result_list.append(tokens[i] + deli) 
    result_list.append(tokens[len(tokens)-1]) 
    return result_list 
相关问题