首页 > 解决方案 > Perl 正则表达式替换

问题描述

我需要完全匹配,"",但不是,"", 例如在这个字符串中

"abc","123","def","","asd","876"",345

我需要替换"",以下内容,"876"但不理会""后面的内容"def"

我现在拥有的正则表达式是

$line =~ s/[^,]"",/",/g

然而,这替代了6from "876"

标签: regexperl

解决方案


使用组替换:

$line =~ s/([^,])"",/$1",/g

或者回顾一下:

$line =~ s/(?<!,)"",/",/g

话虽如此,""是 CSV 引用的引号,它可以出现在字符串中。例如,这是有效的:"""abc""". 为避免破坏这一点,还要"从后面排除:

$line =~ s/(?<![,"])"",/",/g

推荐阅读