如何仅使用一个Regex将一个字符串替换为另一个字符串,还是必须使用多个Regex和temp字符串?

时间:2019-02-09 06:01:46

标签: c# regex

我有一个变量被赋予这样的值:

vm.WordType = phrase.WordType;

其中短语.WordType的值可以是这样的:

"Godan verb with ru ending, Transitive Verb"

,我想将其更改为

"Godan v with ru end, Transitive v"

我可以使用Regex例如用v代替动词,但是有一种方法可以使用Regex进行更多的替换,例如用“ end”替换“ end”还是我必须以某种方式将多个Regex和使用临时变量?

vm.WordType = Regex.Replace(phrase.WordType, "verb", "v", RegexOptions.IgnoreCase);

1 个答案:

答案 0 :(得分:1)

您当然可以打两次Regex.Replace-第一次替换“动词”,第二次替换“结束”。

如果您不喜欢这样做,可以在一个正则表达式中执行以下操作:

Regex.Replace("Godan verb with ru ending, Transitive Verb", "(v)erb|(end)ing", "$1$2", RegexOptions.IgnoreCase)

我在这里使用的正则表达式是:

(v)erb|(end)ing

它匹配“动词”并将“ v”放入组1,或者匹配“ end”并将“ end”放入组2。

替换为$1$2,表示组1和组2。

假设您还想用“ trans”替换“ transitive”,则可以轻松地将正则表达式更改为:

(v)erb|(end)ing|(trans)itive

并替换为所有三个组:

$1$2$3

请注意,此方法将保留大小写,因此“动词”变为“ V”,“动词”变为“ v”。如果不希望这样做,则可以传入MatchEvaluator并将其转换为小写字母:

Regex.Replace(
            "Godan verb with ru ending, Transitive Verb", 
            "(v)erb|(end)ing",
            x => string.Join("", x.Groups.Cast<Group>().Skip(1).Select(y => y.Value)).ToLowerInvariant(),
            RegexOptions.IgnoreCase)