我的文本文件具有相同的符号,如下所示,是行的开头的许多倍。我怎样才能提取这样一条线。我已经尝试了下面的代码,但它不起作用。有关为什么不匹配的线索?
文字文件行:
[==========] 10 tests from 4 test cases ran. (43950 ms total)
代码:
if (/^\Q[==========]\E/ .. /^\Qran\)\E/) {
print "$i.Match Found:".$_."\n";
$i++;
}
答案 0 :(得分:1)
试试这个,没有经过测试,但应该有效。我测试了正则表达式并且它有效。
#!/usr/bin/perl
use strict;
use warnings;
open (somefile, 'data.txt');
while(<somefile>) {
chomp;
if ( $_ =~ m/^\[==========\]/ ) {
print "Match found: ";
}
}
close (somefile);
为澄清目的; chomp
从行尾删除新行,在这种情况下不是必需的。
答案 1 :(得分:0)
#!/usr/bin/perl
# your code goes here
use strict;
use warnings;
while(chomp(my $line = <DATA>)) {
if ( $line =~ m$^\[=.*?]$ ){
print "Line which starts with [==] is $line\n";
}
}
__DATA__
[==========] 10 tests from 4 test cases ran. (43950 ms total)
A line without the equal signs at the beginning
[==========] 4 tests from 2 test cases ran. (30950 ms total)
[===]A line with equal signs at beginning.
答案 2 :(得分:0)
您正在使用触发器操作符,该操作符将匹配从第一个正则表达式开始到第二个正则表达式(或数据末尾)的行。从你正在使用的正则表达式,我不认为这是你的意图。
要匹配以[==========]
开头的行并将所有内容提取到单词ran,您需要使用capture group:
if (/^\Q[==========]\E(.*?ran)/) {
print "$. Match Found: $1\n";
}
括号匹配任何字符,包括ran
,然后将它们放在特殊的$1
变量中。另请注意,使用$.
(当前行号)可以节省您使用$i
计算的数量。
如果您只想提取可以使用的数字:
if (/^\Q[==========]\E (\d+) tests from (\d+) test cases ran/) {
print "$. Match Found: $1 $2\n";
}