用正则表达式交换两个单词

时间:2016-01-13 17:05:34

标签: regex

假设我们想要转换

  

我有猫,猫和猫,她有狗,狗和狗。

  

我有狗,狗和狗,她有猫,猫和猫。

当然可以使用多个正则表达式来完成:

s/cat/monkey/g
s/dog/cat/g
s/monkey/dog/g

所以问题是它是否可以用一个正则表达式完成。

2 个答案:

答案 0 :(得分:1)

这就是你在.NET中的表现:

var regex = new Regex(@"(cat|dog)");
var text = regex.Replace(template,
            match => match.Value=="cat"?"dog":"cat");

答案 1 :(得分:1)

Perl解决方案

您可以使用替换定义哈希,并使用带有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 ++

的原始答案

如果您打算使用Notepad ++,则可以使用带有条件替换模式的命名捕获组:

查找内容:\b(?<o1>dog)|(?<o2>cat)\b

替换为:(?{o1}cat:dog)

enter image description here

正则表达式只匹配整个单词dogcat,并且根据匹配的组,将使用相应的替换。

这可能是由于Notepad ++中使用的Boost正则表达式库。