Разделить и распределить строки в Perl - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть эта форма строки:

xxx| aaa yyy| bbb ccc zzz| ddd eee

Я хочу разделить и распределить в этом массиве с Perl:

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

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

ОК, перенесено из комментариев. Я положил его туда, пока вопрос был закрыт.

Используя регулярное выражение подстановки, мы перебираем строку, извлекая ключ и значения. Строка значения разделяется на пробел и сохраняется в анонимном массиве в %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
0 голосов
/ 14 декабря 2011

Однострочное решение:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...