好的,我尝试了一些选项,但我没有做对 - 看起来它是我的正则表达式规范的问题,但也可能是其他语法。非常感谢任何帮助/指导。
我正在尝试读取CSV文件并一次处理一行 - 丢弃标题行。我将特别关注该文件中的两个字段。
现在我一次读取一行文件后,我正在尝试处理这两个字段:
while ( my $line = <$data> ) {
chomp $line;
if ( $line !~ /^Date/ ) {
if ( $line =~ /"/ ) { $line =~ s|"||g }
...;
my $homeTeam = getTeam( $fields[5] );
my $awayTeam = getTeam( $fields[7] );
...;
my $arbiterRec = join ",", $gameDate, $gameTime, "", $season, $gameLevel,
$homeTeam, "", $awayTeam, "", $site, $subSite, "", "";
print "$arbiterRec\n";
}
}
sub getTeam {
my ($team) = trim( $_[0] ) =~ m{(R\d+-\d+B|G\d+$)}x;
return $team;
}
sub trim {
( my $s = $_[0] ) =~ s/^\s+|\s+$//g;
return $s;
}
有了这个,如果我有一个输入(感兴趣的字段标有^^^):
mm/dd/yyyy, hh:mm AA, dd, Aaaaaa, aaD, R35-14G1, , U14 Girls Area Schedule R256-14G1, , AAA, , ,
^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我希望获得如下输出:
mm/dd/yy, hh:mm AA, dd, Aaaaaa, aaD, R35-14G1, , R256-14G1, , AAA, , ,
^^^^^^^^ ^^^^^^^^^
取而代之的是:
mm/dd/yy, hh:mm AA, dd, Aaaaaa, aaD, G1, , G1, , AAA, , ,
^^ ^^
知道我在语法或RegEx匹配中可能出错了吗?
答案 0 :(得分:1)
只需将正则表达式更改为
即可(R\d+-\d+(?:B|G)\d+$)
实际问题是(R\d+-\d+B|G\d+$)
正则表达式首先检查单词是以R
开头,后跟一个或多个数字,然后是 - 最后是B
。但是在你的输入中没有这样的词。所以这会失败。接下来,它将转到以G
开头的第二部分,最后它与最后一个G
以及后面的一个或多个数字匹配。