繁体   English   中英

正则表达式替换用短划线包围的一个字母

[英]Regular Expression to replace one letter surrounded with dashes

我尝试用另一个字母替换一个或两个破折号包围的特定字母

示例 :modif-i-ed => modifieded(-i-替换为y)

a-im => eim(a-替换为e)

我试过了

Regex.Replace(word, "-?([a-zA-Z])-", new_letter)

但它产生了例如第一个例子的modiyyed

问题是,一旦第一-变得可选的,有2个匹配的内部modif-i-edf-i- 因此,有两个替代品。

我建议在-X-模式之前匹配和捕获字母,然后在匹配评估器中按原样返回它们,并使用-?[az]-匹配然后替换:

(\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演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM