2013-11-20 4 views
-1

Я хотел бы проанализировать блоки текста (а не абзацы), которые могут быть разделены более чем двумя символами \n. Например:Python Регулярное выражение для разделения блоков текста с изменением разделения строк

 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Morbi quam nunc, pretium quis tincidunt in, tincidunt vel arcu. 
Class aptent taciti sociosqu ad litora torquent per conubia nostra. 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Morbi quam nunc, pretium quis tincidunt in, tincidunt vel arcu. 
Class aptent taciti sociosqu ad litora torquent per conubia nostra. 


Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Morbi quam nunc, pretium quis tincidunt in, tincidunt vel arcu. 
Class aptent taciti sociosqu ad litora torquent per conubia nostra. 

Первый блок отделен \n\n, но второй и третий блоки отделены друг от друга \n\n\n. Я хотел просто использовать string.split(r'\n\n') вместо регулярного выражения, но текст может содержать любое количество строк новой строки, разделяющих каждый блок. Я не могу найти регулярное выражение, которое допускает любое количество строк новой строки.

+0

Без комментариев downvotes! Ура! – Randy

ответ

2
import re 
re.split(r'\n{2,}', string) 

Вы можете указать повторение в паре способов:

  • * - повторить предыдущий элемент ноль или более раз
  • + - повторить предыдущий элемент один или несколько раз
  • {m,n} - повторить предыдущий элемент между m и n раза, m по умолчанию равно 0, если не предусмотрено, n по умолчанию для неограниченно (на самом деле 65535, но это деталь реализации).

Таким образом, чтобы соответствовать \n повторным двумя или более раз вы использовали бы \n{2,}.

0

re.split("\n\n+",my_text) ... Я думаю, что будет работать

вы также можете сделать

map(lambda x:x.strip(),my_string.split("\n\n")) 

и что должно работать нормально без регулярных выражений

+0

Просто используя '+' будет захватывать один или несколько, мне нужно два или более. – Randy

+0

meh Я исправил его ... –

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