正则表达式替换

时间:2015-03-13 19:39:35

标签: c# regex

如果我有string这样的话:

MyObject[0]

我想使用RegEx在`[

>之前插入()

所以我最终会:

MyObject()[0]

我使用String.Replace但如果已经有(),则可能会导致问题。

.Replace("[", "()[")

示例:

MyObject()[0].Items[0]

最终

MyObject()()[0].Items()[0]

希望使用正则表达式来避免重复。

Regex.Replace(s, @"[A-Za-z]\[", "()[");

这里的问题是它取代了前面的字符:

MyObjec()[0]

建议?

2 个答案:

答案 0 :(得分:1)

使用替换中A-Z块周围的分组来恢复您的t

Regex.Replace(s, @"([A-Za-z])\[", "$1()[");

来自LinqPad的测试:

Regex.Replace("MyObject[0]", @"([A-Za-z])\[", "$1()[")

输出:

MyObject()[0]

答案 1 :(得分:1)

只需查找单词字符后跟[并且仅在该情况下替换(如果单词字符后跟(。

例如:

 Regex.Replace(
  input, 
  //find expression
  @"(\w+)(\[)", 
  //replacement expression
  @"$1()$2")