c#regex用动态匹配替换问题?

时间:2012-04-25 13:06:09

标签: c# regex c#-4.0

所以我有一个很长的字符串,我有“保留字”,我需要用db中的值替换它。

eg.

string text = "You're salary for the month of ((month)) is ((salary))

现在我做的是匹配每个保留字,然后搜索我的数据集,然后用它们的值替换那些

Regex ex = new Regex(@"(?<=\(\().*?(?=\)\))");
foreach(Match match in ex.Matches(body)){           
                string valuefromset = values.FirstOrDefault(val => val.Variable == match.Value).Value;
                    var pattern = @"(("+match.Value+"))";
                    body = Regex.Replace(body, pattern, valuefromset, RegexOptions.IgnoreCase);
                }
            }

现在发生了什么

text = "You're salary for the month of ((April)) is (($10000))";

我不确定为什么模式会得到单词而不是标签。我应该使用另一个正则表达式但具有特定值吗?具有特定保留字在我使用它的模式中是重要的,并不确定我在做什么。

感谢任何帮助。感谢!!!

1 个答案:

答案 0 :(得分:4)

那是因为你没有逃避替换正则表达式中的斜杠

var pattern = @"(("+match.Value+"))";
                ^^               ^^

你没有匹配它们,你创建了两个组。试试这个:

var pattern = @"\(\("+match.Value+"\)\)";