2009-09-11 63 views
10

我有一个字符串,由制表符分隔几个部分:如何将一个字符串拆分为只有两个部分的Perl?

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

我想这只是第一个选项卡上的分裂,在$k让“你好”结束了和和休息$v结束。这并不奏效:

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

我该怎么做?

+3

其实,我刚刚阅读文档split(),被困惑;用Google搜索,然后来到这里。我在哪里找到答案。 – Chap 2013-01-25 06:10:02

回答

36

为了得到这一点,你需要使用第三个参数来split(),这给函数域的最大数量分裂成(如属正数):

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

如果数值的长度不确定,我想用$ v捕获所有数据。 $ V的格式将会是什么样DATE_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez 2009-09-11 18:37:21

+2

这将在$捕获$ K “DATE_1” 和 “_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ......”诉有关更多信息,我将链接到'split()'函数的perldoc参考页面 - 它将解释它如何在您想要的所有细节中工作。我建议你阅读它。 Perldoc的信息非常丰富。 – 2009-09-11 18:39:28

7

号它会给你前两项和其余的折腾。试试这个:

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

如果数值的长度不确定,我想以$ v的形式捕获所有数据。 $ V的格式将会是什么样DATE_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez 2009-09-11 18:36:44

+0

像克里斯·鲁茨在他的评论说,这个数字告诉Perl多少部分分成。因此,值为2时,第一部分以$ v为单位,第一部分在分割中消耗,剩下的字符串不会变为$ v。 – 2009-09-11 18:44:28

1

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

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