在regex.replace中使用$ 0的麻烦 - c#

时间:2016-12-19 16:49:18

标签: c# asp.net regex

string value = "From: $0-$100";
string emailBody = "{From}";
emailBody = Regex.Replace(emailBody, "{From}", value, RegexOptions.IgnoreCase);

我希望在regex.replace之后获得emailBody的价值。

预期产出:来自:$ 0- $ 100

实际输出:来自:{来自} - $ 100

有人可以解释一下原因是什么,我该如何解决?在此先感谢。

4 个答案:

答案 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

请参阅C# online demo

答案 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);