2013-01-13 2 views
0

Поэтому у меня есть несколько предложений, как:Python: предложение расщепления производит пропуски

The window is over there. The lamp is on. The fire is burning. 

Когда я разделить его с помощью раскола («»), а затем присоединиться к нему с новой строкой, он теряет «»

Затем я попытался регулярное выражение как (?<=\.)\s но он производит пространство перед первой буквой второй и третьей букв:

The window is over there. 
The lamp is on. 
The fire is burning. 

Я не хочу, чтобы дополнительное пространство. Я хочу:

The window is over there. 
The lamp is on. 
The fire is burning. 

Благодаря

+0

Ваше решение для регулярных выражений отлично работает для меня – Eric

ответ

3
".\n".join(i.strip() for i in a.split(".")) 
+0

Ваше последнее предложение не имеет '.' – Eric

+0

Да, вы правы. Ну, предполагая, что каждое предложение есть. мы всегда можем добавить «.». в конце выражения :). В противном случае мое решение не распространяется на этот случай. – hymloth

3
>>> test = "The window is over there. The lamp is on. The fire is burning." 
>>> print test.replace(". ",".\n") 
The window is over there. 
The lamp is on. 
The fire is burning. 
+1

Ух, избили меня: P –

+0

Я видел это. Великие умы думают одинаково? –

+0

Несомненно, я буду работать с этим;) –

1

Очевидно дело не с особыми случаями (т.е. нет места после периода), то почему бы не просто сделать:

>>> s = 'The window is over there. The lamp is on. The fire is burning.' 
>>> print s.replace('. ', '.\n') 
The window is over there. 
The lamp is on. 
The fire is burning. 
1

Есть несколько способов борьбы с разделением ввода: удаление после расщепления, использование регулярного выражения для разделения или использования простого поиска.

Первый вариант, пожалуй, самый интуитивный: вы разбиваете строку на такую ​​точку, как вы уже делали, а затем разбиваете полученные строки, чтобы удалить любые пробелы и восстановить конечную точку. В Python:

sentences = input.split('.') 
sentences = [s.strip() + '.' for s in sentences if s] 
print sentences.join('\n') 

Второй и более простой подход - просто заменить. «С» \ п ':.

print input.replace('. ', '.\n') 

Это будет работать с вашим входом, но потерпит неудачу, если кто-то использует два пространства для разделения предложений (которые предпочитают некоторые люди).

Окончательный и наиболее гибкий подход использовать регулярное выражение для разделения на комбинации точка и пробел:

import re 
sentences = re.split('(?<=\.)\s*', input) 
print sentences.join('\n') 

Обратите внимание на важное различие с регулярным выражением: Я \ с * потреблять все возможные пробелы. Это имеет значение в случаях, когда имеется два или более пробелов или вообще нет.

Смежные вопросы