使用perl分割空格

V. *_*kie 2 regex perl

我有这行代码来分割文本文件中的空格:

my @line_splits = split /\s+/, $ine;
Run Code Online (Sandbox Code Playgroud)

这是文本文件的一些内容:

  1 2016-09-27 14:07:20.084877
  2 2016-09-27 14:07:20.084998
  3 2016-09-27 14:07:20.131343
  4 2016-09-27 14:07:20.131374
  6 2016-09-27 14:07:20.137359
  7 2016-09-27 14:07:20.137556
  8 2016-09-27 14:07:20.137796
  9 2016-09-27 14:07:20.437769
 10 2016-09-27 14:07:20.437796
100 2016-09-27 14:07:23.293661 
Run Code Online (Sandbox Code Playgroud)

我的目标是获取日期和时间(我知道在$ line_splits [1]和$ line_splits [2]).

但是当我运行我的perl脚本时,从1到99的行是错误的,而在100和以上我已经得到了我想要的东西.

Time Stamp: 98 2016-09-27               --> line 98
Time Stamp: 99 2016-09-27               --> line 99
Time Stamp: 2016-09-27 14:07:23.293661  --> line 100
Time Stamp: 2016-09-27 14:07:23.299406  --> line 101
Time Stamp: 2016-09-27 14:07:23.299437  --> line 102
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我,正则表达式有什么问题,还是有其他方法可以做到这一点?

我不知道它是否已经在这里重复,但任何帮助将非常感谢.

谢谢 :)

Sob*_*que 9

哇,很多复杂的答案,但解决方案真的很容易.

只使用split没有/\s+/正则表达式.

默认行为 -或者如果你只是指定你' '分裂-是,它忽略前导空格.但/\s+/事实并非如此.

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;

while ( <DATA> ) {
  chomp;
  my @fields  = split;
  print $fields[2],"\n"
}

__DATA__
  1 2016-09-27 14:07:20.084877
  2 2016-09-27 14:07:20.084998
  3 2016-09-27 14:07:20.131343
  4 2016-09-27 14:07:20.131374
  6 2016-09-27 14:07:20.137359
  7 2016-09-27 14:07:20.137556
  8 2016-09-27 14:07:20.137796
  9 2016-09-27 14:07:20.437769
 10 2016-09-27 14:07:20.437796
100 2016-09-27 14:07:23.293661 
Run Code Online (Sandbox Code Playgroud)

  • 是.默认情况下,split是"任何空格",省略任何前导.这是因为它与`awk`的行为相同. (3认同)