有一个文本文件,看起来像:
200.0 250.0 300.0 350.0 400.0
162:02:10 017:01:56 017:08:18 011:16:22 008:40:18
580.0 600.0 620.0 640.0 660.0
004:04:01 001:47:27 007:25:29 017:44:53 003:07:34
Run Code Online (Sandbox Code Playgroud)
尝试将第1行和第3行解析为"值",将第2行和第4行解析为"时间".
我的代码:
if($line =~ /^\d[^:]*\d/){
my @values = split(/\s/,$line);
}
elsif($line =~/^\d+:\d+:\d+/){
my @time = split(/\s/,$line);
}
Run Code Online (Sandbox Code Playgroud)
问题:始终匹配第一个正则表达式.我对正则表达式#1的理解是,它将匹配以数字开头的行,后跟任何次数不是':'的值,后跟另一个数字.
这是因为第2行和第4行确实包含第一个正则表达式的模式.
也许你可以简单地检查,一条线是否有冒号,这就足够了吗?像这样:
my @time;
my @values;
if($line =~ /:/){
@time = split(/\s+/,$line);
}
else{
@values = split(/\s+/,$line);
}
Run Code Online (Sandbox Code Playgroud)