【发布时间】:2013-04-10 18:36:50
【问题描述】:
我正在尝试编写一个脚本来解析试算表。文件中每一行的布局始终相同,但我在让正则表达式正确匹配时遇到问题。该行的前 10 个字符始终是帐号。这是一个例子:
0000000099 S000 Doe, John 00 1,243.22 01/01/1901
我正在尝试将这些中的每一个捕获到单独的变量的列中,但我的表达式不起作用。
这是我目前所拥有的。
#!/usr/bin/perl -w
use strict;
my $filename = "S:\\TELLERS\\GalaxyDown\\tbal";
my $answer = undef;
open(FIN, $filename) || die "File not found";
do {
print "Enter an account number: ";
chomp(my $acctNum = <STDIN>);
if ($acctNum =~ /\d{1,10}/) {
$acctNum = pad_zeros($acctNum);
#print "$acctNum\n"; #test to make sure the padding extends the account
#number to 10 digits - comment out after verification
while (<FIN>) {
#print "$_\n";
if (m/(^[0-9]{10}/) {
print "Passed\n";
}
else {
print "Failed\n";
}
}
}
else {
print "Invalid account number. Please try again.\n";
}
print "Would you like to view another account balance? (yes/no): ";
chomp($answer = lc <STDIN>);
} while ($answer ne "no");
sub pad_zeros {
my $optimal_length = 10;
my $num = shift;
$num =~ s/^(\d+)$/("0"x($optimal_length-length$1)).$1/e;
return $num;
}
任何帮助将不胜感激。
【问题讨论】:
-
鉴于它是常量,使用 perl 的 split 函数并在空格上进行拆分是否同样容易?我认为这会更直接。
-
可能是剪切粘贴,但我相信这里有一个错字: if (m/(^[0-9]{10}/){ (@987654324 之前的额外
(@ -
哪个正则表达式失败了?失败时的输入是什么?
-
不幸的是,拆分不起作用,因为名称字段中可能有空格。这是我最初的想法。正则表达式无法匹配除额外的 ( 可能是原因。
标签: regex perl text-parsing string-parsing