在Perl中我的正则表达式模式正确匹配区分大小写的字符串,但不是大小写不同的字符串。我正在解析一个CSV文件,其中第一行是国家名称,其他行是该国家的缩写或常见其他拼写。不区分大小写的正则表达式匹配不在perl中工作
示例:CSV的第1列是美国,美国,美国和美国。第2栏是:墨西哥,MX,MEX。
下面是完整的代码::
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
my $filename = 'countrycodes.csv';
my $line;
my @rowStrings;
my @rows;
my @columns;
这是我使用测试串码:
my $string = "Mex, MEX, USA, usa, US, MX, CAN, Canada";
open(my $fh, '<', $filename) or die "Can't open $filename: $!";
$line = <$fh>;
@rowStrings = split("\r", $line);
#make rows strings into arrays
foreach my $i (0..$#rowStrings){
$rows[$i] = [split(",",$rowStrings[$i])];
}
my $columnCount = values scalar $rows[0];
print "column count: $columnCount \n";
#create array for each column from CSV
foreach my $column (0..$columnCount){
foreach my $row (0..$#rows){
$columns[$column][$row] = $rows[$row][$column];
if ($columns[$column][$row]) {
}
}
}
在这里,我要通过缩写/拼写和期待的阵列为比赛。从数组中搜索任何缩写并将其替换为CSV文件中的标题/国家/地区名称($ head)。
for my $col (0..$#columns-1){
my $head = $columns[$col][0];
for my $ro (1..$#rows){
if ($columns[$col][$ro]){
$string =~ s/\s$columns[$col][$ro],/ $head,/i;
print $string . "\n";
}
}
}
这是最后的结果端子输出:
Mex, Mexico, United States, usa, United States, Mexico, Canada, Canada
因此,大家可以看到,MEX正确匹配,因为这是它正在搜索术语,而不是墨西哥,即使我正在使用/ i修饰符。我究竟做错了什么?
编辑:美国是匹配的,bot不是美国。
,以供参考正则表达式是$string =~ s/\s$columns[$col][$ro],/ $head,/i
谢谢!
为什么不打印'$ columns [$ col] [$ ro]'来查看它试图匹配的东西。 – xxfelixxx
我一开始就把它打印出来。我知道它与CSV字段的确切拼写相匹配,但在案件不同时不适用。 – chuckieDub
'使用Text :: CSV;' – Robert