jan*_*jan 1 regex perl multiline multilinestring
我知道这个网站上有很多关于将多行正则表达式与 perl 匹配的问题,但是,我仍然无法弄清楚如何执行以下操作。因此,任何帮助或相关问题的链接将不胜感激。
我有一个input.txt由字段标签(由反斜杠标识)和字段内容构成的文本文件,如下所示:
\x text
\y text text
text text
\z text
Run Code Online (Sandbox Code Playgroud)
字段内容可以包含换行符,但为了进一步处理,我需要确保所有字段内容都在一行上。以下显然能够跨多行正确匹配,但是,它不会删除它,而是重新插入它。
#!/usr/bin/perl
$/ =undef;
{
open(my $in, "<", "input.txt") or die "impossible: $!";
open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
while (<$in>) {
s/\n([^\\])/ \1/g; # delete all line breaks unless followed by backslash and replace by a single space
print $out $_ ;
}
}
Run Code Online (Sandbox Code Playgroud)
它将空格添加到前面(所以我知道它正确地找到了它),但仍然保留了换行符。输出看起来像这样:
\x text
\y text text
text text
\z text
Run Code Online (Sandbox Code Playgroud)
而我希望得到这个:
\x text
\y text text text text
\z text
Run Code Online (Sandbox Code Playgroud)
我认为您的输入有一个回车换行对。您只替换了换行符,但回车符仍然存在。
您可以匹配\v垂直空白(比行结尾多一点)、\R通用 Unicode 行结尾,[\r\n]+以获取其中之一(单独或一起),或者\r\n如果您确定它们都会在那里。诀窍是选择一个适合您的行尾变化的方法。
并且,\1替换侧的 最好写成$1.