【问题标题】:Parsing file for relevant fields相关字段的解析文件
【发布时间】:2017-04-05 19:26:22
【问题描述】:

如何在文件中使用正则表达式:

A7247, partOf:["LTA_SO", "dontact"]
alat, partOf:["WTP_ZR"]
yello, partOf:[] 

然后回来(注意不是任何事情的一部分):

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

谢谢!

【问题讨论】:

  • 你有什么尝试吗?
  • 是的,我可以使用以下内容获取第一个字段(A7247 和 alat):^[^,]*
  • 现在尝试查找引号 (") 并查找它们之间的值。您认为这是正确的策略吗?
  • 找到了一种将所有内容都放在括号中的方法:“(?:[^\]|\\.)*”

标签: regex bash perl pattern-matching match


【解决方案1】:

右侧(: 之后的部分)看起来像 JSON。如果是真的,最好这样处理:

use strict;
use warnings;
use JSON::XS;

while (<DATA>) {
    chomp;
    my ($lhs, $rhs) = split(/:/, $_, 2);
    my $array_ref = decode_json($rhs);

    $lhs = (split(/,/, $lhs))[0];
    $rhs = join(',', @$array_ref);

    print join(':', $lhs, $rhs), "\n";
}

__DATA__
A7247, partOf:["LTA_SO", "dontact"]
alat, partOf:["WTP_ZR"]
yello, partOf:[]

输出:

A7247:LTA_SO,dontact
alat:WTP_ZR
yello:

【讨论】:

  • 谢谢马特!这非常有效,并且被分解到足以让我很好地理解它。
  • @telecomToperl 真的是 JSON 吗?
猜你喜欢
  • 1970-01-01
  • 2022-06-17
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
相关资源
最近更新 更多