在 perl 正则表达式替换中,如何删除列表元素的前导空格?
In perl regex replacements, how to remove leading whitespace for list elements?
我使用 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)/\n@happy_list/sg;
print;
输出结果为:
aaa
foo
bbb
e
f
g
h
在输出中,列表的每个元素的开头都有一个白色的space,就在列表元素的前面。挺好的,就是有点丑。有什么方便的技巧可以删除多余的 space?
这是因为数组在字符串上下文中使用,所以默认分隔符是 space。
您可以通过在替换之前执行 $" = '';
来更改此设置。
$_ = "aaa\nfoo\nbbb";
$" = ''; #"for syntax highlighting
$_ =~ s/(aaa.*?bbb)/\n@happy_list/sg;
print;
您还可以这样做:
$_ = "aaa\nfoo\nbbb";
my $str = join('', @happy_list);
$_ =~ s/(aaa.*?bbb)/\n$str/sg;
print;
你试过trim吗?
$_ =~ s/^\s+//;
首先-我建议不要那样使用$_
。它是 perl
中的保留变量,用作循环迭代器。作为循环操作的一部分,有时需要修改它,但是将它设置为 print;
语句的 shorthand 是不好的风格。
这个问题的根源在于对数组进行字符串化——无论如何,您实际上不需要在这里做这件事。
#!/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 正则表达式搜索特定模式,并紧接着添加一些新内容。添加的东西是一个列表,正如通常预期的那样,我希望列表的每个元素在输出中占据一行。我的代码是这样的:
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)/\n@happy_list/sg;
print;
输出结果为:
aaa
foo
bbb
e
f
g
h
在输出中,列表的每个元素的开头都有一个白色的space,就在列表元素的前面。挺好的,就是有点丑。有什么方便的技巧可以删除多余的 space?
这是因为数组在字符串上下文中使用,所以默认分隔符是 space。
您可以通过在替换之前执行 $" = '';
来更改此设置。
$_ = "aaa\nfoo\nbbb";
$" = ''; #"for syntax highlighting
$_ =~ s/(aaa.*?bbb)/\n@happy_list/sg;
print;
您还可以这样做:
$_ = "aaa\nfoo\nbbb";
my $str = join('', @happy_list);
$_ =~ s/(aaa.*?bbb)/\n$str/sg;
print;
你试过trim吗?
$_ =~ s/^\s+//;
首先-我建议不要那样使用$_
。它是 perl
中的保留变量,用作循环迭代器。作为循环操作的一部分,有时需要修改它,但是将它设置为 print;
语句的 shorthand 是不好的风格。
这个问题的根源在于对数组进行字符串化——无论如何,您实际上不需要在这里做这件事。
#!/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;