如何替换','而不用字符串中的单位替换它

时间:2013-10-21 16:39:18

标签: regex perl

我想在以下字符串中将“,”替换为@,但不以单位(10,000)格式更改它。

  1. x,y,zx@y@z
  2. x1,y1,z1x1@y1@z1
  3. x1,y1 10,000,z1x1@y1 10,000@z1
  4. 我使用s/(\D),/\1@/g,但它不适用于2和3.如何识别排除模式是双方的数字?有人可以帮忙吗?非常感谢

2 个答案:

答案 0 :(得分:5)

你需要一个正则表达式,用来匹配左边或右边没有数字的逗号。

s/(?<!\d),|,(?!\d)/@/g

负面后瞻断言(?<!\d)允许匹配x,,因为x不是数字。使用否定表达式允许这也匹配行的开头,例如, ,x。否定前瞻断言(?!\d)允许匹配未跟随数字的逗号。这些表达式都不会与数字包围的逗号匹配。

答案 1 :(得分:0)

尝试以下方法:

s/,(?<!\d)(?!\d)/\@/g;

示例脚本

use strict;
use warnings; 

my @array = ( 'x,y,z', 'x1,y1,z1', 'x1,y1 10,000,z1');

for my $string (@array) {
    $string =~ s/,(?<!\d)(?!\d)/\@/g;
    print "$string\n";
}
#OUTPUT
#x@y@z
#x1@y1@z1
#x1@y1 10,000@z1
相关问题