我希望有一个正则表达式来查找所有花括号,并用其他字符串替换它们。
例如,我想将“ {foo} ”替换为“ {FOO ”,将“ {bar} ”替换为“ BAR “和” {} “与” EMPTY “。如果输入为“ abc {foo} def {bar} {} ”,则输出为“ abc FOO def BAR EMPTY ”。
不允许嵌套括号或未耦合括号。如果需要字符“{”或“}”。它应该加倍。因此,“{{def}}”只是“{def}”。
不允许使用{}中的其他字符串。说,我只想要“ {foo} ”和“ {bar} ”。因此,“ abc {xyz} def ”应被视为无效输入。
答案 0 :(得分:3)
如果您有可用的负面观察/前瞻:
(?<!{){([a-z]+)}(?!})
并替换为匹配组的值。
([a-z]+)
与您收录的字符串匹配,(?<!{)
确保{
之前没有第二个{
,而(?!})
会产生}
确保}
之后没有第二个(?^|[^{]){([a-z]+)}(?$|[^})
。
如果你没有lookbehinds / lookaheads,那么
{{1}}
答案 1 :(得分:0)
我会先使用{}
替换EMPTY
而不使用正则表达式。
然后使用
(?<!{){(foo|bar)}(?!})
匹配{foo}
或{bar}
但不匹配{}
或{{anything}}
或{anything}
反向引用号1包含匹配的文本。
因此代码段可能看起来像
Regex matches = new Regex(@"(?<!\{)\{(foo|bar)\}(?!\})", RegexOptions.IgnoreCase);
resultString = matches.Replace(subjectString, "$1".ToUpper());
(我希望在字符串上调用ToUpper()有效;我不知道C#,所以如果我错了请纠正我)