正则表达式到第一个匹配项,然后替换找到的匹配项
本文关键字:替换 正则表达式 第一个 然后 | 更新日期: 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 会让它更快)