0

大家好!:)

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

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

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

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

有人可以告诉我,我怎么能写出这样的正则表达式?特别是,我可以做类似“任何字符没有”的事情来排除上面的四个字符({、}、“和\)而不是列出每个允许的字符吗?

非常感谢!!尼基:)

4

5 回答 5

6

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

于 2009-10-29T14:02:59.977 回答
1

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

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

解释:

表达式构建如下:

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

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

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

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

结合它们构成了我开始使用的正则表达式。

于 2009-10-29T14:17:19.603 回答
1

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

查看Regular-Expressions.info 中字符类页面的“否定字符类”部分。

于 2009-10-29T13:49:24.880 回答
1
[^(){}\r\n]+\{0}[^(){}\r\n]+

将匹配除 (, ), {, } 和换行符以外的任何文本,然后 match {0},然后和以前一样。{0};前后必须至少有一个字符 如果您不想要,请替换+*.

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

^[^(){}\r\n]+\{0}[^(){}\r\n]+$
于 2009-10-29T13:59:52.973 回答
1

(类似于蒂姆的回答)

就像是:

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

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

于 2009-10-29T14:01:31.440 回答