2013-04-24 33 views
3

我怎么能包括delimetr到re.split结果?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.'] 

我怎么能没有尖峰呢?

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

感谢

回答

4

您可以通过空格通过punctuaction之前尝试拆分

(?<=...)

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

+0

Bah,误读了这个问题。 :-P – 2013-04-24 20:00:20

+0

新闻发布:)Впринципе,тактожеможносделать。 Спасибо,Павел。 – 2013-04-24 20:08:08

+0

现在用英文,为我们其余的;) – 2013-04-24 20:09:53