string value = "From: $0-$100";
string emailBody = "{From}";
emailBody = Regex.Replace(emailBody, "{From}", value, RegexOptions.IgnoreCase);
我希望在regex.replace之后获得emailBody的价值。
预期产出:来自:$ 0- $ 100
实际输出:来自:{来自} - $ 100
有人可以解释一下原因是什么,我该如何解决?在此先感谢。
答案 0 :(得分:3)
在替换模式中使用$$
替换为1 $
:string value = "From: $$0-$$100"
。
string value = "From: $$0-$$100";
string emailBody = "{From}";
emailBody = Regex.Replace(emailBody, "{From}", value, RegexOptions.IgnoreCase);
模式中的$0
将替换为整个匹配值,并且$1
被解析为ID为1的不存在组的反向引用,因此,由于它不存在,将文字$1
传递给结果(如您所料)。
请注意,如果您有一个动态(用户生成的)替换模式,应始终将其视为文字,只需Replace("$", "$$")
:
string value = "From: $0-$100";
string emailBody = "{From}";
emailBody = Regex.Replace(emailBody, "{From}", value.Replace("$", "$$"), RegexOptions.IgnoreCase);
Console.WriteLine(emailBody); // => From: $0-$100
答案 1 :(得分:0)
你需要改变$符号,因为它用于替换你的捕获类。我的意思是,$ 0,$ 1 .. $ 9意味着你要用你捕获的一个类替换它。见https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx
ýou scape them using another $
string value = "From: $$0-$$100";
修改强>
关于"组0" - 0美元的东西 - 点击这里 https://stackoverflow.com/a/2248328/4911877
答案 2 :(得分:0)
如果您只想进行简单的替换(并且您拥有用户提供的内容),则可以使用以下表单:
MyRegex.Replace(userContent, _ => "replacement");
在这里,我们传递了一个不关心匹配的lambda,只是为它们显式返回固定的替换文本。
答案 3 :(得分:-1)
你需要摆脱花括号。
emailBody = Regex.Replace(emailBody, @"\{From\}", value, RegexOptions.IgnoreCase);