Perl 中的分割和分布行

发布于 2024-12-21 02:47:34 字数 178 浏览 0 评论 0原文

我有这种形式的行:

xxx| aaa yyy| bbb ccc zzz| ddd eee

我想用 perl 分割并分布在这个数组中:

xxx| aaa
yyy| bbb
yyy| ccc
zzz| ddd
zzz| eee

I have this form of line:

xxx| aaa yyy| bbb ccc zzz| ddd eee

I want to split and distribute in this array with perl:

xxx| aaa
yyy| bbb
yyy| ccc
zzz| ddd
zzz| eee

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

影子的影子 2024-12-28 02:47:34

好的,从评论转来的。我在问题结束时把它放在那里。

使用替换正则表达式,我们迭代字符串,提取键和值。值字符串按空格分割,并与相应的键一起存储在 %hash 中的匿名数组中。

代码:

use strict;
use warnings;
use v5.10; # to enable say

$_="xxx| aaa yyy| bbb ccc zzz| ddd eee"; 
my %hash; 
while (s/(\w+)\|([ \w]+\b(?!\|))//) { 
    $hash{$1} = [ split ' ',$2 ];
}
for my $key (keys %hash) {
    for my $val (@{$hash{$key}}) { 
        say "$key | $val";
    }
}

输出:

xxx | aaa
yyy | bbb
yyy | ccc
zzz | ddd
zzz | eee

Ok, transferred from comments. I put it there while the question was closed.

With a substitution regex, we iterate through the string, extracting a key and the values. The value string is split on whitespace, and stored in an anonymous array in %hash, with the corresponding key.

Code:

use strict;
use warnings;
use v5.10; # to enable say

$_="xxx| aaa yyy| bbb ccc zzz| ddd eee"; 
my %hash; 
while (s/(\w+)\|([ \w]+\b(?!\|))//) { 
    $hash{$1} = [ split ' ',$2 ];
}
for my $key (keys %hash) {
    for my $val (@{$hash{$key}}) { 
        say "$key | $val";
    }
}

Output:

xxx | aaa
yyy | bbb
yyy | ccc
zzz | ddd
zzz | eee
木槿暧夏七纪年 2024-12-28 02:47:34

单线解决方案:

perl -lne'for(split/ (?=\w+\|)/){($p,@a)=split/ /;print"$p $_"for@a}'

用途:

$ echo "xxx| aaa yyy| bbb ccc zzz| ddd eee" | perl -lne'for(split/ (?=\w+\|)/){($p,@a)=split/ /;print"$p $_"for@a}'
xxx| aaa
yyy| bbb
yyy| ccc
zzz| ddd
zzz| eee

One-liner solution:

perl -lne'for(split/ (?=\w+\|)/){($p,@a)=split/ /;print"$p $_"for@a}'

usage:

$ echo "xxx| aaa yyy| bbb ccc zzz| ddd eee" | perl -lne'for(split/ (?=\w+\|)/){($p,@a)=split/ /;print"$p $_"for@a}'
xxx| aaa
yyy| bbb
yyy| ccc
zzz| ddd
zzz| eee
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文