在多行perl正则表达式中匹配和删除换行符
Matching and deleting newline character in mutiline perl regex
我知道在这个站点上有很多关于将多行正则表达式与 perl 匹配的问题,但是,我仍然无法弄清楚如何执行以下操作。因此,我们将不胜感激任何帮助或相关问题的链接。
我有一个文本文件 input.txt
,它由字段标签(由反斜杠标识)和字段内容构成,如下所示:
\x text
\y text text
text text
\z text
字段内容可以包含换行符,但为了进一步处理,我需要确保所有字段内容都在一行中。以下显然能够跨多行正确地匹配,但是,它不会删除它而是重新插入它。
#!/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([^\])/ /g; # delete all line breaks unless followed by backslash and replace by a single space
print $out $_ ;
}
}
它将 space 添加到前面(所以我知道它正确地找到了它)但仍然保留换行符。输出如下所示:
\x text
\y text text
text text
\z text
虽然我希望得到这个:
\x text
\y text text text text
\z text
我认为您的输入有一个回车 return-换行符对。您只是替换了换行符,但回车 return 仍然存在。
您可以为垂直空格匹配 \v
(比行结尾多一点),为通用 Unicode 行结尾匹配 \R
,为(单个或一起)匹配 [\r\n]+
, 或者 \r\n
如果你确定他们都在那里。诀窍是在行尾发生变化时选择适合您的一种。
而且,替换端的</code>最好写成<code>
。
我知道在这个站点上有很多关于将多行正则表达式与 perl 匹配的问题,但是,我仍然无法弄清楚如何执行以下操作。因此,我们将不胜感激任何帮助或相关问题的链接。
我有一个文本文件 input.txt
,它由字段标签(由反斜杠标识)和字段内容构成,如下所示:
\x text
\y text text
text text
\z text
字段内容可以包含换行符,但为了进一步处理,我需要确保所有字段内容都在一行中。以下显然能够跨多行正确地匹配,但是,它不会删除它而是重新插入它。
#!/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([^\])/ /g; # delete all line breaks unless followed by backslash and replace by a single space
print $out $_ ;
}
}
它将 space 添加到前面(所以我知道它正确地找到了它)但仍然保留换行符。输出如下所示:
\x text
\y text text
text text
\z text
虽然我希望得到这个:
\x text
\y text text text text
\z text
我认为您的输入有一个回车 return-换行符对。您只是替换了换行符,但回车 return 仍然存在。
您可以为垂直空格匹配 \v
(比行结尾多一点),为通用 Unicode 行结尾匹配 \R
,为(单个或一起)匹配 [\r\n]+
, 或者 \r\n
如果你确定他们都在那里。诀窍是在行尾发生变化时选择适合您的一种。
而且,替换端的</code>最好写成<code>
。