2014-01-18 59 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 
相關問題