2017-02-13 190 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