2015-03-12 3 views
1

У меня есть список списков, содержащих строки. После того, как много сортировали регулярные выражения работают, я вставил то, что я хотел бы использовать в качестве разделителя, @@@, в мои строки:разделение и объединение текста на основе разделителя в Python

[['@@@this is part one and here is part two and here is part three and heres more and heres more'], 
['this is part [email protected]@@and here is part two and here is part three and heres more and heres more'], 
['this is part one and here is part [email protected]@@and here is part three and heres more and heres more'] 
['this is part one and here is part two and here is part [email protected]@@and heres more and heres more'] 
['this is part one and here is part two and here is part three and heres [email protected]@@and heres more']] 

Теперь, мне нужно придумать с этим:

[['this is part one'],['and here is part two'],['and here is part three'], ['and heres more'], ['and heres more']] 

До сих пор мои попытки раздуты, взломаны и вообще уродливы. Я нахожу, что я раскалываю, совмещаю и сопоставляю. Может ли кто-нибудь рекомендовать некоторые общие рекомендации по этому типу проблем и какие инструменты использовать, чтобы держать его управляемым?

EDIT обратите внимание! and heres more действительно появляется дважды в идеальном выходе!

+0

Можете ли вы прояснить правило, касающееся того, когда «и здесь больше» должно быть включено в выход? Должен ли он отображаться только в списке вывода один раз? Кроме того, списки, встроенные в список входных данных, должны быть разделены запятыми? – Boa

+0

Спасибо за вопрос. Возможно, дублированный текст ... который должен оставаться, и порядок должен быть сохранен. –

ответ

1

Я думаю, вам действительно нужно захватить все символы, которые только после этого отправятся на @@@ до следующего and или конец строки.

>>> [[m] for x in l for m in re.findall(r'@@@(.*?)(?=\sand\b|$)', x[0])] 
[['this is part one'], ['and here is part two'], ['and here is part three'], ['and heres more'], ['and heres more']] 
+0

выглядит, как будто текст потерял его заказ: часть первая больше не часть! –

+0

комплект() не сохраняет заказ. [см. здесь для обсуждения] (http://stackoverflow.com/questions/9792664/python-set-changes-element-order) – Omega

+0

@ MattO'Brien Вы имели в виду обновление? .. Вы хотите, чтобы ожидаемый результат выше целиком или только для первого внутреннего списка? –

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