1

改行のグループを削減しようとする次の正規表現があります。

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

連続する改行の数を最大 2 行に減らしたいと考えています (内部 wiki 用にインポートしているいくつかのファイルをクリーンアップしようとしています)。データ全体に数行の CRLF が含まれています (Windows データ ファイル)。それでも、うまくいかないようです。

私は何を間違っていますか?これが間違っているサンプルです:

次のように始まります。

メニューとツールバーの配置に欠けていたオプションを追加</p>

</div>

</body>

</html>

HTMLタグを削除しているので、次のようになります。

メニューとツールバーの配置に欠けていたオプションを追加





次に、正規表現を適用すると、次のようになります。

メニューとツールバーの配置に欠けていたオプションを追加



4

3 に答える 3

6

これらの改行の周りに残っている他の空白も一致させてみてください。

s/(\r?\n[ \t]*){2,}/\n\n/g;
于 2009-06-08T15:25:44.387 に答える
1

与えられた答えを適用するのに苦労しているように見えるので、実際のデータをいくつか見せてください。

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

\r 文字をすべて削除してから、元の改行のみの置換を 1 回実行することもできます。

于 2009-06-08T15:43:25.583 に答える
0

このように複数のグループを一致させてみましたか?

(\r\n){2,}/\n\n
于 2009-06-08T15:25:57.100 に答える