Почему мое регулярное выражение не разрушает группы строк? - PullRequest
1 голос
/ 08 июня 2009

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

s/(\n|\r\n|\n\r)(\n|\r\n|\n\r)(\n|\r\n|\n\r)+/\n\n/gmi;

Это началось как:

s/\n\n(\n)+/\n\n/gmi

Я стремлюсь сократить количество непрерывных строк новой строки до максимум двух подряд (просто пытаюсь очистить некоторые файлы, которые я импортирую для внутренней вики) Данные распределены по нескольким строкам CRLF (файлы данных Windows). Тем не менее, это не похоже на работу.

Что я делаю не так? Вот пример, где это выходит не так:

Начинается как:

added missing options for Menu and toolbar positioning</p>

</div>

</body>

</html>

Я убираю HTML-теги, так что получается вот так:

added missing options for Menu and toolbar positioning





Затем я применяю регулярное выражение, и оно выглядит так:

added missing options for Menu and toolbar positioning



Ответы [ 3 ]

6 голосов
/ 08 июня 2009

Попробуйте также сопоставить любые другие пробелы, оставшиеся вокруг этих строк:

s/(\r?\n[ \t]*){2,}/\n\n/g;
1 голос
/ 08 июня 2009

Поскольку у вас, похоже, возникают проблемы с применением данных ответов, возможно, вы могли бы показать нам некоторые из ваших фактических данных, набрав

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper $slurped_file;

Вы также можете попробовать выполнить один проход, удалив все символы \ r, а затем исходную замену только на новую строку.

0 голосов
/ 08 июня 2009

Вы пытались сопоставить несколько групп, как эта?

(\r\n){2,}/\n\n
...