RegEx替换计算?

时间:2010-09-20 11:11:39

标签: c# regex

是否有可能以某种方式在结果中使用计算进行RegEx替换? (在VS2010中)

如:

Grid\.Row\=\"{[0-9]+}\"

Grid.Row="eval(int(\1) + 1)"

3 个答案:

答案 0 :(得分:1)

您可以使用MatchEvaluator来实现此功能,例如

 String s = Regex.Replace("1239", @"\d", m => (Int32.Parse(m.ToString()) + 1).ToString());

Output: 23410

修改 我刚注意到......如果你的意思是“使用VS2010查找替换功能”而不是“使用C#”,那么答案就是“不”,我很害怕。

答案 1 :(得分:0)

您总是可以使用捕获来检索计算所需的任何值,然后使用由您的等式和捕获的任何值构建的新RegEx执行RegEx替换。

如果等式不使用输入文本中的任何内容,则只需一个RegEx即可。您只需通过将静态部分与计算值连接起来构建它。

答案 2 :(得分:0)

不幸的是,C#和.NET不提供eval方法或等效方法。但是,可以使用库进行表达式解析(快速谷歌给我这个.NET Math Expression Parser)或自己编写(实际上非​​常简单,查看Shunting-yard Algorithm和{{3} })。只需捕获组,然后将组值输出到您编写的库/方法。


编辑:我现在看到你想要这个用于VS2010 程序。除非您编写自己的VS扩展,否则这是无法实现的。您可以随时编写程序来搜索和替换代码并将代码输入其中,然后将原始代码替换为其输出。