Regex 在perl正则表达式替换中,如何删除列表元素的前导空格?

Regex 在perl正则表达式替换中,如何删除列表元素的前导空格?,regex,perl,replace,whitespace,element,Regex,Perl,Replace,Whitespace,Element,我使用Perl正则表达式搜索某个模式,并在它之后立即添加一些新内容。添加的内容是一个列表,正如通常所期望的那样,我希望列表中的每个元素在输出中占据一行。我的代码如下: push(@happy_list, "e\n"); push(@happy_list, "f\n"); push(@happy_list, "g\n"); push(@happy_list, "h\n"); $_ = "aaa\nfoo\nbbb"; $_ =~ s/(aaa.*?bbb)/$1\n@happy_list/sg;

我使用Perl正则表达式搜索某个模式,并在它之后立即添加一些新内容。添加的内容是一个列表,正如通常所期望的那样,我希望列表中的每个元素在输出中占据一行。我的代码如下:

push(@happy_list, "e\n");
push(@happy_list, "f\n");
push(@happy_list, "g\n");
push(@happy_list, "h\n");

$_ = "aaa\nfoo\nbbb";
$_ =~ s/(aaa.*?bbb)/$1\n@happy_list/sg;
print;
输出结果为:

aaa
foo
bbb
e
 f
 g
 h

在输出中,列表的每个元素的开头都有一个空格,就在列表元素的前面。没关系,只是有点难看。有没有删除多余空格的简便方法?

出现这种情况是因为数组用于字符串上下文,所以默认分隔符是空格

您可以通过在替换之前执行
$”='';
来更改此设置

$_ = "aaa\nfoo\nbbb";
$" = ''; #"for syntax highlighting
$_ =~ s/(aaa.*?bbb)/$1\n@happy_list/sg;
print;
您还可以执行以下操作:

$_ = "aaa\nfoo\nbbb";
my $str = join('', @happy_list);
$_ =~ s/(aaa.*?bbb)/$1\n$str/sg;
print;

出现这种情况是因为数组在字符串上下文中使用,所以默认分隔符是空格

您可以通过执行
$”=''来更改此设置在替换之前

$_ = "aaa\nfoo\nbbb";
$" = ''; #"for syntax highlighting
$_ =~ s/(aaa.*?bbb)/$1\n@happy_list/sg;
print;
您还可以执行以下操作:

$_ = "aaa\nfoo\nbbb";
my $str = join('', @happy_list);
$_ =~ s/(aaa.*?bbb)/$1\n$str/sg;
print;

你试过修剪它吗

$_ =~ s/^\s+//;

你试过修剪它吗

$_ =~ s/^\s+//;
首先,我建议不要像那样使用
$\uu
。它是
perl
中的保留变量,用作循环迭代器。作为循环操作的一部分,有时需要对其进行修改,但将其设置为
打印的缩写语句的样式不好

这个问题的根源在于对数组进行字符串化,而这实际上并不需要在这里进行

#!/usr/bin/env perl

use strict;
use warnings;

my @happy_list;

push(@happy_list, "e\n");
push(@happy_list, "f\n");
push(@happy_list, "g\n");
push(@happy_list, "h\n");

my @new_list; 
push ( @new_list, "aaa\n", "foo\n", "bbb\n" ); 
print @new_list, @happy_list;
尽管如此,我还是建议不要添加换行符,而是:

#!/usr/bin/env perl

use strict;
use warnings;

my @happy_list;

push(@happy_list, "e");
push(@happy_list, "f");
push(@happy_list, "g");
push(@happy_list, "h");

my @new_list; 
push ( @new_list, "aaa", "foo", "bbb" ); 
print join "\n", @new_list, @happy_list;
首先,我建议不要像那样使用
$\uu
。它是
perl
中的保留变量,用作循环迭代器。作为循环操作的一部分,有时需要对其进行修改,但将其设置为
打印的缩写语句的样式不好

这个问题的根源在于对数组进行字符串化,而这实际上并不需要在这里进行

#!/usr/bin/env perl

use strict;
use warnings;

my @happy_list;

push(@happy_list, "e\n");
push(@happy_list, "f\n");
push(@happy_list, "g\n");
push(@happy_list, "h\n");

my @new_list; 
push ( @new_list, "aaa\n", "foo\n", "bbb\n" ); 
print @new_list, @happy_list;
尽管如此,我还是建议不要添加换行符,而是:

#!/usr/bin/env perl

use strict;
use warnings;

my @happy_list;

push(@happy_list, "e");
push(@happy_list, "f");
push(@happy_list, "g");
push(@happy_list, "h");

my @new_list; 
push ( @new_list, "aaa", "foo", "bbb" ); 
print join "\n", @new_list, @happy_list;

您可以添加一些示例输入和输出,以及您希望输出的具体外观吗?只是更新了帖子,添加了代码段和示例输出。您可以添加一些示例输入和输出,以及您希望输出的具体外观吗?只是更新了帖子,添加了代码段和示例输出。是的,
$"='';解决方案与我的代码完美配合。谢谢~!:-)是的,
$"='';解决方案与我的代码完美配合。谢谢~!:-)谢谢发布的Perl代码不是我正在使用的真正代码;它改编自一段较长的代码,并经过简化以演示我的问题。但是你的帖子总是很有启发性和洞察力,谢谢你~!谢谢发布的Perl代码不是我正在使用的真正代码;它改编自一段较长的代码,并经过简化以演示我的问题。但是你的帖子总是很有启发性和洞察力,谢谢你~!