如何在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.']我怎么才能在没有钉子的情况下做到呢?
谢谢
发布于 2013-04-25 03:57:38
您可以尝试按前面有标点符号的空格进行拆分:
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中找到匹配项,因为lookbehind将备份3个字符,并检查包含的模式是否匹配。所包含的模式只能与固定长度的字符串匹配,这意味着允许使用abc或a|b,但不允许使用a*和a{3,4}。
https://stackoverflow.com/questions/16200961
复制相似问题