RegEx for String.Format

时间:2009-10-29 13:45:03

标签: regex escaping backslash string-formatting braces

大家好! :)

我有一个应用程序,用户可以在其中将字符串插入文本框,稍后将用于String.Format输出。因此用户的输入必须具有某种格式:

我想要替换一个占位符,因此字符串应该是这样的形式:“Text {0} Text”。所以它必须包含至少一个'{0}',但花括号之间没有其他语句,例如没有{1}。

对于“{0}”之前和之后的文本,我会允许任何字符。

所以我认为,我必须遵守以下限制:{必须写成{{,}必须写成}},“必须写成\”和\必须写成\。

有人可以告诉我,我怎么能写这样的RegEx?特别是,我可以做一些类似“任何字符没有”的内容,以排除上面的四个字符({,},和\),而不是列出每个允许的字符吗?

非常感谢!! 尼克:)

5 个答案:

答案 0 :(得分:6)

我不想成为那些不回答这个问题的人,但实际上要求用户格式化输入以使用String.Format的可能性很小。为他们提供两个输入请求,因此他们输入{0}之前的部分和{0}之后的部分。然后你只想连接字符串而不是使用String.Format-在用户提供的文本上使用String.Format只是一个坏主意。

答案 1 :(得分:1)

听起来你正在寻找[^CHARS_GO_HERE]构造。您需要的正确的正则表达式取决于您的正则表达式引擎,但它类似于[^({})]

查看Character Class page at Regular-Expressions.info的“否定字符类”部分。

答案 2 :(得分:1)

[^(){}\r\n]+\{0}[^(){}\r\n]+

将匹配除(,),{,}和换行符之外的任何文本,然后匹配{0},然后与之前相同。在{0}之前和之后需要至少有一个字符;如果您不想这样做,请将+替换为*

您可能还想将正则表达式锚定到输入字符串的开头和结尾:

^[^(){}\r\n]+\{0}[^(){}\r\n]+$

答案 3 :(得分:1)

(与Tim的答案相似)

类似的东西:

^[^{}()]*(\{0})[^{}()]*$

http://www.regular-expressions.info/javascriptexample.html

进行测试

答案 4 :(得分:1)

我认为你的问题可以通过正则表达式来回答:

^(((\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])*(\{0\}))+(\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])*$

说明:

表达式构建如下:

^(allowed chars {0})+(allowed chars)*$

一个或多个允许的字符序列,后跟一个带有可选允许字符的{0}。

允许的字符是由你提到的4个序列构成的(我假设\ escape是\\而不是\。)加上所有不包含转义字符的字符:

(\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])

它们组合了我开始的正则表达式。