Python 正则表达式上的拆分

Python 正则表达式上的拆分,python,regex,split,Python,Regex,Split,我有一个字符串,我想用正则表达式拆分它 输入: 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. Output:应该是一个列表,其中包含我们拆分的表达式 [S1:1第一次拆分开始,s2:1第一次拆分结束,S1:2第二次拆分开始,s2:2第二次拆分结束,S1:3第

我有一个字符串,我想用正则表达式拆分它

输入:

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.
Output:应该是一个列表,其中包含我们拆分的表达式

[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)

我不太确定我是否理解您要将此输入拆分到何处,但如果您希望要拆分的文本包含在输出中,则需要有一个捕获模式:

 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 ']

我不太确定我是否理解您要将此输入拆分到何处,但如果您希望要拆分的文本包含在输出中,则需要有一个捕获模式:

 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 ']

尝试在正则表达式中使用正向前瞻
(?=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 ']

尝试在正则表达式中使用正向前瞻
(?=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 ']

你能把你想要的东西添加到输出中吗?考虑简单地把它拆分为代码> \\n>代码>类似于<代码> Re.S拆开(“\n”,text)之类的东西,我们不必有一个\n。文本可以是一个大的字符串。您可以将您想要的添加为输出吗?考虑简单地通过代码< > \n>代码来分割它。文本可以是一个大字符串。是的,我希望将要拆分的文本包含在输出中。为什么在输出列表的第一个位置会有一个额外的空行。这就是拆分的工作方式;从文档中可以看出:“如果分隔符中有捕获组,并且它在字符串的开头匹配,那么结果将以空字符串开头。字符串的结尾也是如此。”老实说,在您接受了前瞻变量之后,我不明白为什么不使用re.split(“\n”,text));似乎您不希望拆分行,而是希望在文本中生成行。是的,我希望要拆分的文本包含在输出中。为什么在输出列表的第一个位置会有一个额外的空行。这就是拆分的工作方式;从文档中可以看出:“如果分隔符中有捕获组,并且它在字符串的开头匹配,那么结果将以空字符串开头。字符串的结尾也是如此。”老实说,在您接受了前瞻变量之后,我不明白为什么不使用re.split(“\n”,text));似乎您不想拆分行,而是想用文本造行。