正则表达式首先匹配,然后替换找到的匹配

时间:2016-02-01 21:36:05

标签: c# regex

在我的C#程序中,我使用正则表达式:

  • 循环显示需要替换的可能单词列表。
  • 对于每个单词,找出我给出的字符串是否有任何匹配。
  • 如果确实如此,我会执行一些(稍微昂贵的)逻辑来创建替换。
  • 然后我执行实际更换。

我目前的代码大致如下:

string toSearchInside; // The actual string I'm going to be replacing within
List<string> searchStrings; // The list of words to look for via regex

string pattern = @"([:@?]{0})";
string replacement;

foreach (string toMatch in searchStrings)
{
    var regex = new Regex(
                            string.Format(pattern, toMatch), 
                            RegexOptions.IgnoreCase
                            );
    var matches = regex.Matches(toSearchInside);

    if (matches.Count == 0)
        continue;

    replacement = CreateReplacement(toMatch);

    toSearchInside = regex.Replace(toSearchInside, replacement);

我可以使用它,但它似乎有点低效,因为它使用了两次正则表达式引擎 - 一次找到匹配(regex.Matches()),一次用于替换regex.Replace())。我想知道是否有办法简单地说替换你已经找到的匹配

1 个答案:

答案 0 :(得分:0)

你可以从第一场比赛中获得所有比赛 - 并且对于你有索引的每场比赛,你可以迭代比赛并将其替换为字符串本身 - 因为它比正则表达式替换更有效。

虽然我会通过小单元测试来衡量性能(并且让NCrunch在后台运行会让它更快)