正则表达式到第一个匹配项,然后替换找到的匹配项

本文关键字:替换 正则表达式 第一个 然后 | 更新日期: 2023-09-27 18:32:52

在我的 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())。我想知道是否有办法简单地说替换您已经找到的匹配项

正则表达式到第一个匹配项,然后替换找到的匹配项

你可以

从第一个匹配项中获取所有匹配项 - 对于每个匹配项,您都有其索引,您可以遍历匹配项并将其替换在字符串本身中 - 因为它比正则表达式替换更有效。

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