string.Format,正则表达式和花括号(C#)

10
我该如何使用 string.Format 将一个值输入到正则表达式中,当这个正则表达式已经用花括号来定义重复限制时?(我的头脑因语法冲突而混乱)
例如,普通的正则表达式是 "^\d{0,2}",我希望将属性 MaxLength 中的 '2' 插入其中。
4个回答

19

用双花括号替换单花括号:

string regex = string.Format(@"^\d{{0,{0}}}", MaxLength);

如果这样让你感到不舒服,你可以使用普通的字符串拼接代替:

string regex = @"^\d{0," + MaxLength + "}";

3
字符串连接让的眼睛很痛苦 ;) - Thomas Levesque
2
如果您不喜欢上述两种方法,另一个选择可能是使用@"^\d{0,$MaxLength}".Replace("$MaxLength", MaxLength.ToString())。我个人并不太喜欢这种方式,因为它不像C#那样,但它确实可以保持正则表达式的可读性。 - Mark Byers

5

你可以通过双括号来转义花括号:

string.Format("Hello {{World}}") // returns "Hello {World}"

在您的情况下,它可能是这样的:
string regexPattern = string.Format("^\d{{0,{0}}}", MaxLength);

2

有关格式化字符串的详细信息,请参见MSDN

var regex = String.Format(@"^\d{{0,{0}{1}", this.MaxLength, "}")

是的,由于大括号解释的怪异性,可能需要额外的参数(在这种情况下不需要)。更多信息请参见MSDN链接。

总的来说,我必须同意Mark的观点,在这种情况下只需使用普通的字符串拼接。


你丢了一个闭合大括号 ;) - Thomas Levesque
不,我不是;)我迅速地发现了那个。 - Matthew Scharley

1
现在您可以使用字符串插值来完成它:

string regex = $@"^\d{{0,{MaxLength}}}";

再次提醒,您需要将大括号加倍转义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接