假设我们想要转换
我有猫,猫和猫,她有狗,狗和狗。
到
我有狗,狗和狗,她有猫,猫和猫。
当然可以使用多个正则表达式来完成:
s/cat/monkey/g
s/dog/cat/g
s/monkey/dog/g
所以问题是它是否可以用一个正则表达式完成。
答案 0 :(得分:1)
这就是你在.NET中的表现:
var regex = new Regex(@"(cat|dog)");
var text = regex.Replace(template,
match => match.Value=="cat"?"dog":"cat");
答案 1 :(得分:1)
您可以使用替换定义哈希,并使用带有e
修饰符的正则表达式,以便将反向引用传递给代码。
#!/usr/bin/perl
%data = ('cat', 'dog', 'dog', 'cat');
$x = "I have cat, cat and cat and she has dog, dog and dog.";
$x =~ s/\b(dog|cat)\b/$data{$1}/eg;
print $x;
IDEONE demo的输出:I have dog, dog and dog and she has cat, cat and cat.
如果您打算使用Notepad ++,则可以使用带有条件替换模式的命名捕获组:
查找内容:\b(?<o1>dog)|(?<o2>cat)\b
替换为:(?{o1}cat:dog)
正则表达式只匹配整个单词dog
或cat
,并且根据匹配的组,将使用相应的替换。
这可能是由于Notepad ++中使用的Boost正则表达式库。