extraction.txt包含类似
的数据S MADHAVA RAO
DIRECTOR (OPERATIONS)
B R B NMPL
NOTE MUDRAN NAGAR
MYSORE -570003
M RAVI KUMAR
ATRIUM 4TH FLOOR 10/19
7TH CROSS STREET
SASTRINAGAR
CHENNAI -600020
PHNO-24469079
VENKATA SIVA PRASAD
B-301 VERTEX PRESTIGE
NIZAMPET ROAD
NEAR BRINDAVAN COLONY
KUKATPALLY
HYDERABAD -500085
.................
.................
.................
从下面写的这个为-5提取值。
open(my$f,'<', "/home/Admin/Desktop/extracting.txt") or die "oops!";
open(my$fh,'>', "/home/Admin/Desktop/finalextracting.txt") or die "oops!";
while (my@line = <$f>) {
for (my$i = 0;$i<=145;$i++){
if ($line[$i]=~m/^\-5/) {
print $fh $line[$i];
}
}
}
close $f;
close $fh;
但是我的程序没有显示任何输出。代码有什么问题请纠正我..
答案 0 :(得分:3)
那是因为你在正则表达式的开头有一个^
,它只会在行的开头匹配。
此外,您无需转义-
。
答案 1 :(得分:3)
首先,不要将整个文件粘贴到@line
数组中,其次不要使用硬编码大小的数组(145
)。至于匹配要小心,因为有些字符有特殊的行为。 ^
是字符串开头的锚点,并且您没有以-5
开头的行
while (my $line = <$f>) {
if ($line =~ /(-5\d+)/) {
print $fh $1;
}
}
答案 2 :(得分:2)
有些事情看起来可能是错的:
1)插入符号^匹配一行的开头,上面显示的所有行都不以-5开头,删除它以搜索该行中的任何位置
2)你不需要转义减号,所以以下内容将匹配-5行中的任何位置:
if ($line[$i]=~/-5/)
3)我相信匹配运算符m //只搜索$ _所以尝试并删除它(我从不使用m,因为如果你只是做“if / -5 /”就暗示了,所以我可能错了。)
if ($line[$i]=~/^\-5/)
希望这会有所帮助
答案 3 :(得分:1)
如果我理解正确你想要做的只是打印行中-5后的所有内容,而不是整行?
在那种情况下
while (my$line = <$f>) {
if ($line =~ /(-5.*)$/) {
print $fh $1;
}
}
可能就是你想要的。