2016-01-05 3 views
1

У меня есть эта строка, которую я хочу разделить на периоды:Как разбить строку на разделители, но исключить другие строки

j = 'you can get it cheaper than $20.99. shop at amazon.com. hurry before prices go up.' 

Это результат я хотел бы:

['you can get it cheaper than $20.99. ', 'shop at amazon.com.', ' hurry before prices go up.'] 

I разделить на каждую строчную букву с периодом до нее и любым числом с периодом и пробелами после него.

x = [] 
sentences = re.split(r'([a-z]\.|\d\.\s)', j) 
sentence_endings = sentences[1::2] 
for position in range(len(sentences)): 
     if sentences[position] in sentence_endings: 
      x.append(sentences[position -1] + sentences[position]) 

печать х дает мне:

['you can get it cheaper than $20.99. ', 'shop at amazon.', 'com.', ' hurry before prices go up.'] 

Я хочу, чтобы «amazon.com», чтобы быть одна строка, поэтому я поручил регулярное выражение, чтобы игнорировать «.com» с re.split(r'([a-z]\.|\d\.\s)[^.com]', j) но это не Принеси мне результат, который я хочу. Каков наилучший способ сделать это?

ответ

1

Non-регулярное выражение вариантом может быть использование nltk.sent_tokenize():

>>> import nltk 
>>> j = 'you can get it cheaper than $20.99. shop at amazon.com. hurry before prices go up.' 
>>> nltk.sent_tokenize(j) 
['you can get it cheaper than $20.99.', 'shop at amazon.com.', 'hurry before prices go up.'] 
3

Простое выражение разделить на периоды, через пробел может быть \.\s.

Вы можете использовать, чтобы сохранить назад 'период в шпагате: (?<=\.)\s

И если вы хотите использовать расщепляющий подход, чтобы получить просто «amazon.com» из вашей строки, вы можете попробовать .*(?=amazon.com)|(?<=amazon.com).*

+0

're.split (r '(? <= \.) \ s', s)' –

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