如何将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.']
如何在没有尖峰的情况下做到这一点?
由于
答案 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|b
或a*
,但a{3,4}
和{{1}}不允许。