【问题标题】:How can I split a string into only two parts with Perl?如何使用 Perl 将字符串分成两部分?
【发布时间】:2010-11-27 14:35:00
【问题描述】:

我有一个字符串,它的几个部分由制表符分隔:

 Hello\t2009-08-08\t1\t2009-08-09\t5\t2009-08-11\t15

我只想在第一个选项卡上拆分它,以便“Hello”以 $k 结尾,而其余部分以 $v 结尾。这不太行:

my ($k, $v) = split(/\t/, $string);

我该怎么做?

【问题讨论】:

  • 其实我刚看了split()的文档,很困惑; google了一下,来到了这里。我在哪里找到了答案。

标签: perl split


【解决方案1】:

为了得到它,您需要使用split() 的第三个参数,它为函数提供了要拆分的最大字段数(如果为正):

my($first, $rest) = split(/\t/, $string, 2);

【讨论】:

  • 如果值的长度不确定怎么办,我想把它全部捕获到 $v 中。 $v 的格式将类似于 date_1\tvalue_1\tdate_2\tvalue_2\tdate_3\tvalue_3...
  • 这将捕获 $k 中的“date_1”和 $v 中的“value_1\tdate_2\tvalue_2\tdate_3\tvalue_3...”。有关更多信息,我链接到了split() 函数上的 perldoc 参考页面——它将详细解释它是如何工作的。我建议你阅读它。 Perldoc 信息量很大。
【解决方案2】:

没有。它会给你前两个项目,然后把剩下的扔掉。试试这个:

my ($k, $v) = split(/\t/, $string, 2);

【讨论】:

  • 如果值的长度不确定怎么办,我想把它全部捕获到 $v 中。 $v 的格式将类似于 date_1\tvalue_1\tdate_2\tvalue_2\tdate_3\tvalue_3...
  • 就像 Chris Lutz 在他的评论中所说的,这个数字告诉 Perl 要分成多少部分。因此,值为 2 时,第一部分进入 $v,第一个 \t 在拆分中消耗,字符串的其余部分保持不变进入 $v。
【解决方案3】:

另一种选择是使用简单的正则表达式。

my($k,$v) = $str =~ /([^\t]+)\t(.+)/;

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多