我有一个应用程序,用户可以在其中将字符串插入文本框,稍后将用于String.Format输出。因此用户的输入必须具有某种格式:
我想要替换一个占位符,因此字符串应该是这样的形式:“Text {0} Text”。所以它必须包含至少一个'{0}',但花括号之间没有其他语句,例如没有{1}。
对于“{0}”之前和之后的文本,我会允许任何字符。
所以我认为,我必须遵守以下限制:{必须写成{{,}必须写成}},“必须写成\”和\必须写成\。
有人可以告诉我,我怎么能写这样的RegEx?特别是,我可以做一些类似“任何字符没有”的内容,以排除上面的四个字符({,},和\),而不是列出每个允许的字符吗?
非常感谢!! 尼克:)
答案 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})[^{}()]*$
进行测试
答案 4 :(得分:1)
我认为你的问题可以通过正则表达式来回答:
^(((\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])*(\{0\}))+(\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])*$
说明:
表达式构建如下:
^(allowed chars {0})+(allowed chars)*$
一个或多个允许的字符序列,后跟一个带有可选允许字符的{0}。
允许的字符是由你提到的4个序列构成的(我假设\ escape是\\而不是\。)加上所有不包含转义字符的字符:
(\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])
它们组合了我开始的正则表达式。