C# 替换包含大括号的字符串

C# 替换包含大括号的字符串,c#,.net,regex,asp.net-mvc,powershell,C#,.net,Regex,Asp.net Mvc,Powershell,我有一份类似的声明 [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password { get; set; } 我想用“TestS

我有一份类似的声明

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
我想用
“TestString”
替换“{0}的长度必须至少为{2}个字符。”。 目前我正在使用Regex.Replace,但它不起作用。 e、 g

请帮忙

编辑: 我正在解析类的每一行(使用VisualStudioShell包),并尝试在找到时替换所提到的字符串。我正在将行号值存储到“lno”中。这就是我在这里初始化它的原因。 它适用于正常的跨步,如:

[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
只有当它使用大括号解析字符串时,才会出现问题


谢谢。

定义正则表达式模式时必须小心。像
{
}
这样的字符在表达式中有一个特殊的含义,需要转义

var lno = "[StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]";
var pattern = @"The \{0\} must be at least \{2\} characters long\."; // Don't forget the @
string _name = Regex.Replace(lno, pattern, "TestString", RegexOptions.None);
拨弄
定义正则表达式模式时必须小心。像
{
}
这样的字符在表达式中有一个特殊的含义,需要转义

var lno = "[StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]";
var pattern = @"The \{0\} must be at least \{2\} characters long\."; // Don't forget the @
string _name = Regex.Replace(lno, pattern, "TestString", RegexOptions.None);
拨弄

没有必要使用正则表达式来完成您想要完成的任务

string lno = "[StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]";
string pattern = "The {0} must be at least {2} characters long.";
string _name = lno.Replace(pattern, "TestString");

没有必要使用正则表达式来完成您想要完成的任务

string lno = "[StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]";
string pattern = "The {0} must be at least {2} characters long.";
string _name = lno.Replace(pattern, "TestString");
您可以使用该方法对字符串进行转义:

string lno = "[StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]";
string pattern = Regex.Escape("The {0} must be at least {2} characters long.");
string _name = Regex.Replace(lno, pattern, "TestString", RegexOptions.None);
从MSDN:

通过用转义码替换最小字符集(\、*、+、?、|、{、[、(、)、^、$、#和空格),对其进行转义。这指示正则表达式引擎按字面解释这些字符,而不是将其作为元字符

您可以使用该方法对字符串进行转义:

string lno = "[StringLength(100, ErrorMessage = \"The {0} must be at least {2} characters long.\", MinimumLength = 6)]";
string pattern = Regex.Escape("The {0} must be at least {2} characters long.");
string _name = Regex.Replace(lno, pattern, "TestString", RegexOptions.None);
从MSDN:

通过用转义码替换最小字符集(\、*、+、?、|、{、[、(、)、^、$、#和空格),对其进行转义。这指示正则表达式引擎按字面解释这些字符,而不是将其作为元字符


首先,您需要用\来转义
lno
字符串中的双引号。然后您可以只使用
string。替换
,或者您还需要在正则表达式中分隔花括号。您试图在这里做什么?您不能使用代码“更改”消息-它的元数据,并且必须在编译时知道时间。@StephenMuecke我已经编辑了我的问题。首先,你需要用\来转义
lno
字符串中的双引号。然后你可以只使用
string。替换
,或者你还需要在正则表达式中分隔花括号。你在这里试图做什么?你不能用cod来“更改”消息e-它的元数据,必须在编译时知道。@StephenMuecke我已经编辑了我的问题。Thanx很多。但是我如何动态转义?什么是动态的?Thanx很多。但是我如何动态转义?什么是动态的?