我想在以下字符串中将“,”替换为@,但不以单位(10,000)格式更改它。
x,y,z
至x@y@z
x1,y1,z1
至x1@y1@z1
x1,y1 10,000,z1
至x1@y1 10,000@z1
我使用s/(\D),/\1@/g
,但它不适用于2和3.如何识别排除模式是双方的数字?有人可以帮忙吗?非常感谢
答案 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