2013-04-24 2 views
3

Как я могу включить delimetr в re.split результат?re.split and delimiter to result

Например, у меня есть текст

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

Как я могу это сделать без шипов?

Благодаря

ответ

4

Вы можете попробовать расщепление пропуска предшествуют punctuaction:

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:

(?<=...)

Спички, если текущая позиция в строке предшествует совпадение для ... , который заканчивается в текущем положении. Это называется положительным lookbehind утверждение. (?<=abc)def найдет матч в abcdef, так как lookbehind будет резервную копию 3 символов и проверьте соответствие совпадающего шаблона. Удерживаемый шаблон должен соответствовать только строкам определенной фиксированной длины, что означает, что abc или a|b разрешены, но a* и a{3,4} - нет.

+0

Bah, неверный вопрос. :-P –

+0

Нормалды все :) В принципе, так тоже можно сделать. Спасибо, Павел. –

+0

И теперь на английском языке, для остальных из нас;) – 2013-04-24 20:09:53