【问题标题】:How do I extract data between square brackets that appear several times in a line using perl?如何使用 perl 在一行中出现多次的方括号之间提取数据?
【发布时间】:2011-01-14 15:55:35
【问题描述】:

我有一行包含方括号数据的多个实例。

[data 1] junk [data 2] junk,junk [data 3] junk [data 4]

有人有 goo 正则表达式吗?所以我可以使用

print $1,$2,$3,$4;

谢谢!

【问题讨论】:

  • 如何制作正则表达式很大程度上取决于垃圾数据。此外,如果方括号可以嵌套,则该语言足够复杂,无法用正则表达式解析。您可以使用 Perl 正则表达式扩展来做到这一点,但它非常肮脏。在这种情况下,最好使用解析器生成器。
  • 经过时间 [846.078000] 到 [857.562000],时钟 [时钟 1],月 [十二月]

标签: regex perl data-processing


【解决方案1】:

使用Text::Balanced 而不是正则表达式。

【讨论】:

    【解决方案2】:
    my $s = "[data 1] junk [data 2] junk,junk [data 3] junk [data 4]";
    my ($one, $two, $three, $four) = $s =~ /\[([^\]]*)\]/g;
    print $one, $two, $three, $four;
    

    【讨论】:

    • 这假定嵌套的方括号对是不允许的。
    • 我需要一些可以使用 print $1, $2, $3, $4 的东西
    • @seaworthy,我不会将其更改为使用 $1、$2、$3、$4,但我已编辑我的回复以允许等效使用。
    • 一个稍微不那么嘈杂的替代方案是/\[(.*?)\]/g,即使用惰性重复
    【解决方案3】:

    如果您只需要快速打印输出,那么应该这样做..

    $s = q( [data 1] junk [data 2] junk,junk [data 3] junk [data 4] );
    print join(', ', @{[$s =~ /\[(.*?)\]/g]}), "\n";

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 2014-07-31
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多