在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