2014-01-02 4 views
2

У меня есть кусок кода, который разбивает строку после запятых и точек (но не тогда, когда цифра до или после запятой или точкой):питон: разбить строку после запятой и точки

text = "This is, a sample text. Some more text. $1,200 test." 
print re.split('(?<!\d)[,.]|[,.](?!\d)', text) 

Результат это:

['This is', ' a sample text', ' Some more text', ' $1,200 test', ''] 

Я не хочу потерять запятые и точки. Так что я ищу это:

['This is,', 'a sample text.', 'Some more text.', '$1,200 test.'] 

Кроме того, если точка в конце text он производит пустую строку в конце списка. Кроме того, в начале разделенных строк есть белые пробелы. Есть ли лучший способ без использования re? Как бы вы это сделали?

+0

Wait .. свободно просто запятые? Или запятые и точки? – Jollywatt

+0

Как я показал в примере, запятые и точки «потеряны», но я хочу их сохранить. – Johnny

+0

Возможный дубликат http://stackoverflow.com/questions/2136556/in-python-how-do-i-split-a-string-and-keep-the-separators –

ответ

7

К сожалению, вы не можете использовать re.split() при совпадении нулевой длины, поэтому, если вы не можете гарантировать, что после запятой или точкой будет пробел, вам понадобится использовать другой подход.

Вот один вариант, который использует re.findall():

>>> text = "This is, a sample text. Some more text. $1,200 test." 
>>> print re.findall(r'(?:\d[,.]|[^,.])*(?:[,.]|$)', text) 
['This is,', ' a sample text.', ' Some more text.', ' $1,200 test.', ''] 

Это не удаляет пробелы, и вы получите пустой матч в конце, если строка заканчивается запятой или точкой, но это довольно легко исправления.

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

>>> print re.split(r'(?<=[,.])(?<!\d.)\s', text) 
['This is,', 'a sample text.', 'Some more text.', '$1,200 test.'] 
+0

Ты бил меня за секунды! – dawg

+0

спасибо, кажется, хорошо – Johnny

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