Sim*_*n D 17 .net c# regex replace
有没有办法计算Regex.Replace调用的替换次数?
例如,Regex.Replace("aaa", "a", "b");我想得到数字3(结果是"bbb"); 因为Regex.Replace("aaa", "(?<test>aa?)", "${test}b");我想得到数字2(结果是"aabab").
我能想到这样做的方式:
方法1和方法2需要手动解析$替换,方法3需要正则表达式匹配字符串两次.有没有更好的办法.
Sim*_*n D 15
感谢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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用包含aaa的文件test.txt,命令行将regexrep test.txt "(?<test>aa?)" ${test}b%errorlevel%设置为2并将文本更改为aabab.
您可以使用MatchEvaluator为每次替换运行的那个,这样您就可以计算它发生的次数:
int cnt = 0;
string result = Regex.Replace("aaa", "a", m => {
cnt++;
return "b";
});
Run Code Online (Sandbox Code Playgroud)
第二种情况比较棘手,因为你必须产生与替换模式相同的结果:
int cnt = 0;
string result = Regex.Replace("aaa", "(?<test>aa?)", m => {
cnt++;
return m.Groups["test"] + "b";
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4905 次 |
| 最近记录: |