不区分大小写的正则表达式匹配在perl中不起作用

chuckieDub

我在perl中的正则表达式模式正确匹配区分大小写的字符串,但不区分大小写的字符串。我正在解析CSV文件,其中第一行是国家/地区名称,其他行是该国家/地区的缩写或常见的其他拼写。

示例: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

正如您所看到的,即使我正在使用/ i修饰符,MEX也可以正确匹配,因为这是它要搜索的术语,而不是Mex。我究竟做错了什么?

编辑:美国是匹配的,机器人不是美国。

供参考的正则表达式模式是 $string =~ s/\s$columns[$col][$ro],/ $head,/i

谢谢!

chuckieDub

问题是我没有包括“ g”运算符,这意味着一旦找到“国家/地区名称”替代的一个实例,它就会停止寻找其他实例。

通过更改$string =~ s/\s$columns[$col][$ro],/ $head,/i$string =~ s/\s$columns[$col][$ro],/ $head,/ig匹配是正确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Perl重命名:不区分大小写的匹配的正则表达式

来自分类Dev

JavaScript正则表达式(?i)选项中字符串不区分大小写的一部分不起作用

来自分类Dev

正则表达式不区分大小写,且输入匹配

来自分类Dev

匹配正则表达式不区分大小写

来自分类Dev

Neo4j不区分大小写的正则表达式搜索中某些特殊字符的大小写似乎不匹配

来自分类Dev

在Perl中覆盖区分大小写的正则表达式

来自分类Dev

XSD中不区分大小写的正则表达式

来自分类Dev

Neo4j不区分大小写的正则表达式中的符号

来自分类Dev

从正则表达式中获取不区分大小写的单词

来自分类Dev

PostgreSQL查询中的正则表达式不区分大小写

来自分类Dev

LINQ中不区分大小写的LIKE条件(带有正则表达式)

来自分类Dev

从正则表达式中获取不区分大小写的单词

来自分类Dev

正则表达式中不区分大小写的搜索

来自分类Dev

正则表达式-如何使表达式不区分大小写?

来自分类Dev

正则表达式模式匹配在scala.js中不起作用?

来自分类Dev

为什么延迟匹配在此正则表达式中不起作用?

来自分类Dev

正则表达式匹配在mongodb-3.2中不起作用

来自分类Dev

有没有办法使Perl正则表达式不区分大小写?

来自分类Dev

如何用发现的不区分大小写的正则表达式替换匹配项,但扩展结果

来自分类Dev

正则表达式匹配不包含substr且不区分大小写的字符串

来自分类Dev

正则表达式区分大小写关闭

来自分类Dev

强制正则表达式区分大小写?

来自分类Dev

javascript从字符串创建不区分大小写的正则表达式

来自分类Dev

Apps脚本正则表达式-不区分大小写

来自分类Dev

如何使此正则表达式不区分大小写?

来自分类Dev

如何使用Regexp.union构建不区分大小写的正则表达式

来自分类Dev

使javascript正则表达式不区分大小写

来自分类Dev

正则表达式不区分大小写,并且带/不带空格

来自分类Dev

Python正则表达式部分不区分大小写

Related 相关文章

  1. 1

    Perl重命名:不区分大小写的匹配的正则表达式

  2. 2

    JavaScript正则表达式(?i)选项中字符串不区分大小写的一部分不起作用

  3. 3

    正则表达式不区分大小写,且输入匹配

  4. 4

    匹配正则表达式不区分大小写

  5. 5

    Neo4j不区分大小写的正则表达式搜索中某些特殊字符的大小写似乎不匹配

  6. 6

    在Perl中覆盖区分大小写的正则表达式

  7. 7

    XSD中不区分大小写的正则表达式

  8. 8

    Neo4j不区分大小写的正则表达式中的符号

  9. 9

    从正则表达式中获取不区分大小写的单词

  10. 10

    PostgreSQL查询中的正则表达式不区分大小写

  11. 11

    LINQ中不区分大小写的LIKE条件(带有正则表达式)

  12. 12

    从正则表达式中获取不区分大小写的单词

  13. 13

    正则表达式中不区分大小写的搜索

  14. 14

    正则表达式-如何使表达式不区分大小写?

  15. 15

    正则表达式模式匹配在scala.js中不起作用?

  16. 16

    为什么延迟匹配在此正则表达式中不起作用?

  17. 17

    正则表达式匹配在mongodb-3.2中不起作用

  18. 18

    有没有办法使Perl正则表达式不区分大小写?

  19. 19

    如何用发现的不区分大小写的正则表达式替换匹配项,但扩展结果

  20. 20

    正则表达式匹配不包含substr且不区分大小写的字符串

  21. 21

    正则表达式区分大小写关闭

  22. 22

    强制正则表达式区分大小写?

  23. 23

    javascript从字符串创建不区分大小写的正则表达式

  24. 24

    Apps脚本正则表达式-不区分大小写

  25. 25

    如何使此正则表达式不区分大小写?

  26. 26

    如何使用Regexp.union构建不区分大小写的正则表达式

  27. 27

    使javascript正则表达式不区分大小写

  28. 28

    正则表达式不区分大小写,并且带/不带空格

  29. 29

    Python正则表达式部分不区分大小写

热门标签

归档