2017-02-13 101 views
0

我有一個字符串,我想要使用正則表達式進行拆分。拆分正則表達式

輸入:

S1:1- first split begins.s2:1- first split ends.s1:2-second split begins.S2:2-second split ends,S1:3-third split begins.S2:3-third split ends. 

輸出:應該是包含在其上我們分裂

[S1表達的列表:1-第一分裂開始,S2:1-第一開叉,S1:2 - 第二拆分開始,S2:2秒開叉,S1:3,第三拆分開始.....]

我想拆就模式[s/S][1/2]:[0-9][0-9]
這是我的,但它給了我一個額外的行,並刪除我分裂的正則表達式。

import re 
text="""S1:1- first Split begins.continue the sentence 
     s2:1- first split ends 
     s1:2-second split begins 
     S2:2-second split ends 
     S1:3-third split begins 
     S2:3-third split ends """ 
output=re.split("[Ss][12]:[0-9]*", text) 
+0

能否請您添加要作爲輸出什麼。 –

+0

考慮通過'\ n'分割這個東西,就像're.split(「\ n」,text)' – Ibrahim

+0

這不是必須的,我們有\ n。文本可能是一個大字符串。 – AMisra

回答

2

嘗試使用正向前查找(?= CODE)在正則表達式來做到這一點,以維護您的正則表達式。您正則表達式將是這樣的:

\s(?=[sS][12]:[0-9]) 

完整代碼:

import re 
text="""S1:1- first Split begins.continue the sentence 
     s2:1- first split ends 
     s1:2-second split begins 
     S2:2-second split ends 
     S1:3-third split begins 
     S2:3-third split ends """ 
output=re.split("\s(?=[sS][12]:[0-9])", text) 

結果:

['S1:1- first Split begins.continue the sentence\n ', 's2:1- first split ends\n ', 's1:2-second split begins\n ', 'S2:2-second split ends\n ', 'S1:3-third split begins\n ', 'S2:3-third split ends '] 
2

我不太確定我明白的地方要拆分該輸入,但如果你想,你就分裂被包含在輸出的文本,那麼你需要有一個拍攝模式:

re.split("([Ss][1-2]:[0-9]-)\s*", text) 

結果:

['', 
'S1:1-', 
'first Split begins.continue the sentence\n  ', 
's2:1-', 
'first split ends\n  ', 
's1:2-', 
'second split begins\n  ', 
'S2:2-', 
'second split ends\n  ', 
'S1:3-', 
'third split begins\n  ', 
'S2:3-', 
'third split ends '] 
+0

是的,我希望我分裂的文本包含在輸出中。爲什麼我們會在輸出列表中的第一個位置獲得額外的空行。 – AMisra

+1

這是拆分工作的方式;從文檔:「如果在分隔符中有捕獲組並且它在字符串的開頭匹配,則結果將以空字符串開頭,對於字符串結尾也是如此。」說實話,在你接受預見變體後,我不明白你爲什麼不使用re.split(「\ n」,text);好像你不想分割線條,而是想要從文本中劃出線條。 – gregory