re.split和分隔符结果

时间:2013-04-24 19:53:55

标签: python regex

如何将delimetr包含到re.split结果中?

例如,我有文字

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

RegExr

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

如何在没有尖峰的情况下做到这一点?

由于

1 个答案:

答案 0 :(得分:4)

您可以尝试按照前缀为空格的空格进行拆分:

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

来自documentation for the re module的说明:

  

(?<=...)

     

匹配,如果字符串中的当前位置前面有...的匹配项   结束于当前位置。这被称为积极的外观   断言。 (?<=abc)def abcdef会在abc找到匹配,因为后面会看到   备份3个字符并检查包含的模式是否匹配。该   包含的模式必须只匹配一些固定长度的字符串,这意味着   允许a|ba*,但a{3,4}和{{1}}不允许。