我尝试用另一个字母替换一个或两个破折号包围的特定字母
实施例: modif-i-ed =>修改(-i-替换为y)
a-im => eim(a-替换为e)
我试过
Regex.Replace(word, "-?([a-zA-Z])-", new_letter)
但它为第一个例子生成例如modiyyed
。
答案 0 :(得分:3)
问题是,一旦第一个-
成为可选项,modif-i-ed
内就会有两个匹配项:f-
和i-
。因此,有两个替代品。
我建议在-X-
模式之前匹配并捕获字母,然后按照匹配评估程序返回它们,并使用-?[a-z]-
匹配然后替换:
(\B[a-z](?=-))|-?[a-z]-
C#:
var myLetter = "y";
var str = " modif-i-ed a-im y-i-eld";
var res = Regex.Replace(str, @"(\B[a-z](?=-))|-?[a-z]-",
m => m.Groups[1].Success ? m.Groups[1].Value : myLetter);
Console.WriteLine(res); // => modifyed yim yyeld
请参阅IDEONE demo