簡體   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