3

我怎样才能在re.split结果中包含分隔符?

例如,我有文字

Bla bla lbaa dsad asd as. Asd qe as!  ASDadf asd! Dsss dwq. Dkmef? 

正则表达式

re.split('\s*([\.!\?]+)\s*', data)

re.split返回这个

['Bla bla lbaa dsad asd as', '.', 'Asd qe as', '!', 'ASDadf asd', '!', 'Dsss dwq', '.', 'Dkmef', '?', '']

虽然我想要这个

['Bla bla lbaa dsad asd as.', 'Asd qe as!', 'ASDadf asd!', 'Dsss dwq.']

我怎么能做到没有尖峰?

谢谢

4

1 回答 1

4

您可以尝试用标点符号前面的空格分割:

In [9]: re.split(r'(?<=[\.!\?])\s+', data)
Out[9]:
['Bla bla lbaa dsad asd as.',
 'Asd qe as!',
 ' ASDadf asd!',
 'Dsss dwq.',
 'Dkmef?']

re 模块的文档中的解释:

(?<=...)

如果字符串中的当前位置前面有匹配,则匹配... 在当前位置结束。这称为肯定的后向断言。(?<=abc)def将在 中找到匹配abcdef项,因为后视将备份 3 个字符并检查包含的模式是否匹配。包含的模式必须只匹配某个固定长度的字符串,这意味着 允许abca|b不允许,但a*不允许a{3,4}

于 2013-04-24T19:57:38.357 回答