【发布时间】:2018-04-03 18:31:46
【问题描述】:
我有这个带有用户数据的字符串:
"1111|John|Smith|32\n2222|Sam|Adams|25\n3333|Chris|Stevens|30\n"
我正在尝试使用正则表达式读取它并创建这样的哈希(使用 JSON 表示法使其易于理解):
{
"1111": {
"IdNumber" : "1111",
"Name" : "John",
"LastName" : "Smith",
"Age" : "32"
},
"2222": {
"IdNumber" : "2222",
"Name" : "Sam",
"LastName" : "Adams",
"Age" : "25"
},
"3333": {
"IdNumber" : "3333",
"Name" : "Chris",
"LastName" : "Stevens",
"Age" : "30"
},
}
父哈希必须以用户的 id 作为键,值将是包含所有用户数据的子哈希。
我尝试使用命名组直接评估生成的 $+ 哈希:
use strict;
use warnings;
use Data::Dumper;
my $str = "1111|John|Smith|32\n2222|Sam|Adams|25\n3333|Chris|Stevens|30\n";
my %users;
while ($str =~ /(?<IdNumber>.*?)\|(?<Name>.*?)\|(?<LastName>.*?)\|(?<Age>.*?)/g){
$users{$+{IdNumber}} = %+;
}
print Dumper %users;
但是我得到了这个结果:
$VAR1 = '1111';
$VAR2 = 4;
$VAR3 = '3333';
$VAR4 = 4;
$VAR5 = '2222';
$VAR6 = 4;
在我看来,子哈希正在转换为标量,但我找不到错误。
你有什么想法吗?谢谢。
【问题讨论】:
-
建议:首先在
\n上拆分数据,然后在|上拆分数据,而不是使用正则表达式
标签: regex perl hashmap regex-group