gpt4 book ai didi

c# - 计数正则表达式替换 (C#)

转载 作者:可可西里 更新时间:2023-11-01 02:59:42 26 4
gpt4 key购买 nike

有没有办法计算 Regex.Replace 调用进行的替换次数?

例如对于 Regex.Replace("aaa", "a", "b");我想把数字 3 取出来(结果是 "bbb" );对于 Regex.Replace("aaa", "(?<test>aa?)", "${test}b");我想得到数字 2(结果是 "aabab" )。

我能想到的方法:

  1. 使用 MatchEvaluator 递增捕获的变量,手动进行替换
  2. 获取 MatchCollection 并迭代它,手动进行替换并保持计数
  3. 首先搜索并获取 MatchCollection,从中获取计数,然后进行单独的替换

方法 1 和 2 需要手动解析 $ 替换,方法 3 需要正则表达式匹配字符串两次。有没有更好的办法。

最佳答案

感谢 Chevex 和 Guffa。我开始寻找一种更好的方法来获取结果,并发现 Match 类上有一个 Result 方法可以进行替换。那是拼图缺失的部分。示例代码如下:

using System.Text.RegularExpressions;

namespace regexrep
{
class Program
{
static int Main(string[] args)
{
string fileText = System.IO.File.ReadAllText(args[0]);
int matchCount = 0;
string newText = Regex.Replace(fileText, args[1],
(match) =>
{
matchCount++;
return match.Result(args[2]);
});
System.IO.File.WriteAllText(args[0], newText);
return matchCount;
}
}
}

对于包含 aaa 的文件 test.txt,命令行 regexrep test.txt "(?<test>aa?)" ${test}b会将 %errorlevel% 设置为 2 并将文本更改为 aabab。

关于c# - 计数正则表达式替换 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com