c#正则表达式用动态匹配替换问题?

c#正则表达式用动态匹配替换问题?,c#,regex,c#-4.0,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)){

所以我有一个长字符串,其中有“保留字”,我需要用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);
                }
            }
我不确定为什么模式只会得到单词而不是标签。我应该使用另一个正则表达式,但具有特定值吗?有特定的保留字在模式中很重要,这就是为什么我使用它,我不确定我在做什么


感谢您的帮助。谢谢

这是因为在replace regex中没有逃过斜杠

var pattern = @"(("+match.Value+"))";
                ^^               ^^
如果不匹配,则创建两个组。试试这个:

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

这是因为在replace正则表达式中,您无法逃脱斜杠

var pattern = @"(("+match.Value+"))";
                ^^               ^^
如果不匹配,则创建两个组。试试这个:

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

没有直接的关系,但是你应该用“Your”而不是“Your”。是否不知道字符串中是否存在标记(保留字)?有很多潜在代币吗?使用StringBuilder的.Replace方法似乎效率更高,复杂度更低。没有直接关系,但应该使用“Your”而不是“Your”。字符串中是否存在标记(保留字)未知?有很多潜在代币吗?这看起来像是使用StringBuilder的。替换方法将更有效,更不复杂。哦,糟糕的是,它确实起作用了!我正在执行字符串模式,并且在执行结束参数时给了我一个“无法识别的转义”错误。谢谢哦,糟了,它真的起作用了!我正在执行字符串模式,并且在执行结束参数时给了我一个“无法识别的转义”错误。谢谢