2013-01-13 2 views
0

을 생성합니다. ""파이썬 : 문장 분할 그래서 내가 어떤 문장 같은이 공백

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

이 있습니다 입력을 분할하는 여러 가지 방법 : 분할 후 스트리핑, 분할 또는 정규 검색을 사용하는 정규 표현식 사용.

첫 번째 옵션은 아마도 가장 직관적입니다. 이미 수행 한 것처럼 문자열을 점으로 분리 한 다음 결과 문자열을 제거하여 공백을 제거하고 후행 점을 복원 할 수 있습니다. 파이썬에서 :

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

두 번째 및 더 간단한 방법은 ''를 간단하게 대체하는 것입니다. '와'\ n '.

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

이것은 당신의 입력으로 작동하지만 누군가가 (어떤 사람들은 선호) 문장을 분리하는 두 개의 공백을 사용하는 경우 실패합니다.

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

공지 정규 표현식과의 중요한 차이점 :

마지막과 가장 유연한 방법은 점과 공백의 조합에 분할하는 정규 표현식을 사용하는 것입니다 내가 소비 * \ s에 사용 가능한 모든 공백. 두 개 이상의 공백이 있거나 전혀없는 경우에 중요합니다.