【问题标题】:Split Variable on white space [duplicate]在空白处拆分变量[重复]
【发布时间】:2013-06-01 12:29:28
【问题描述】:

我正在尝试将一个字符串拆分为一个数组,拆分发生在空格处。每个文本块都由许多(可变)空格分隔。

这是字符串:

NUM8         host01    1,099,849,993  1,099,849,992             1

我尝试了以下但没有成功。

my @array1 = split / /, $VAR1;

my @array1 = split / +/, $VAR1;

my @array1 = split /\s/, $VAR1;

my @array1 = split /\s+/, $VAR1;

我想结束:

$array1[0] = NUM8
$array1[1] = host01
$array1[2] = 1,099,849,993
$array1[3] = 1,099,849,992
$array1[4] = 1

最好的分割方法是什么?

【问题讨论】:

  • 最后一个选项应该可以,所以我猜你可能有一些标签。
  • 你从你的尝试中得到了什么输出?您使用的最后一种方法应该有效。
  • @squiguy: \s 匹配标签。问题是如果字符串以分隔符开头,Perl 将返回一个具有零长度前导字段的列表。
  • 这是一个激进的想法:阅读文档:perldoc.perl.org/functions/split.html

标签: perl split


【解决方案1】:

如果split 的第一个参数是字符串' '(空格),它是特殊的。它应该匹配任何大小的空格:

my @array1 = split ' ', $VAR1;

(顺便说一句,它几乎等同于您的最后一个选项,但它也会删除任何前导空格。)

【讨论】:

    【解决方案2】:

    尝试使用:

    my @array1 = split(' ',$VAR1);
    

    Codepad Demo

    来自Perldoc

    作为另一种特殊情况,split 模拟了 当 PATTERN 被省略或为文字时,命令行工具 awk 由单个空格字符组成的字符串(例如 ' ' 或 "\x20" , 但不是例如// )。在这种情况下,EXPR 中的任何前导空格都是 在分裂发生之前移除

    【讨论】:

      【解决方案3】:

      \s+ 匹配 1 个或多个空格,并对其进行拆分

      my @array1 = split /\s+/, $VAR1;
      

      【讨论】:

      • 也可以。也许我的输出在我测试时有所不同,所以它让我失望了。似乎这里的所有答案都有效。