【发布时间】:2023-04-07 06:35:01
【问题描述】:
有没有办法计算 Regex.Replace 调用的替换次数?
例如对于Regex.Replace("aaa", "a", "b");,我想取出数字3(结果是"bbb");对于Regex.Replace("aaa", "(?<test>aa?)", "${test}b");,我想取出数字2(结果是"aabab")。
我能想到的方法:
- 使用 MatchEvaluator 递增捕获的变量,手动进行替换
- 获取 MatchCollection 并对其进行迭代,手动进行替换并保持计数
- 首先搜索并获取 MatchCollection,从中获取计数,然后进行单独替换
方法 1 和 2 需要手动解析 $ 替换,方法 3 需要正则表达式匹配字符串两次。有没有更好的办法。
【问题讨论】:
-
这是一个简单的命令行实用程序,可以通过任何正则表达式搜索和替换模式作为命令行参数调用。所以理想情况下会想要一个不预先假设模式知识的通用解决方案。真的,虽然这是出于兴趣 - 在.Net中这样做的最佳方式是什么?看起来像手动解析 $ 替换的 MatchEvaluator 方法是前进的方向,但它有点混乱:(