[英]How to find all coupling bracket with regular expression?
我想要一个正则表达式来查找所有大括号并将其替换为其他字符串。
例如,我想用“ FOO ”替换“ {foo} ”,用“ BAR ”替换“ { bar} ”,用“ EMPTY ”替换“ {} ”。 如果输入为“ abc {foo} def {bar} {} ”,则输出为“ abc FOO def BAR EMPTY ”。
不允许使用嵌套括号或非耦合括号。 如果需要字符“ {”或“}”。 应该加倍。 因此,“ {{def}}”仅仅是“ {def}”。
不允许在{}中使用其他字符串。 说,我只想要“ {foo} ”和“ {bar} ”。 因此,应将“ abc {xyz} def ”识别为无效输入。
如果您有否定的后顾之忧/前瞻功能:
(?<!{){([a-z]+)}(?!})
并替换为匹配组的值。
([az]+)
匹配您包含的字符串, (?<!{)
确保在{
之前没有第二个{
,而(?!})
确保在之后没有第二个}
您的}
。
如果您没有后顾之忧,那么
(?^|[^{]){([a-z]+)}(?$|[^})
我首先要使用EMPTY
替换{}
而不使用正则表达式。
然后使用
(?<!{){(foo|bar)}(?!})
匹配{foo}
或{bar}
但不匹配{foo}
{}
或{{anything}}
或{anything}
反向编号 1包含匹配的文本。
因此,代码段可能看起来像
Regex matches = new Regex(@"(?<!\{)\{(foo|bar)\}(?!\})", RegexOptions.IgnoreCase);
resultString = matches.Replace(subjectString, "$1".ToUpper());
(我希望在字符串上调用ToUpper()可以工作;我不知道C#,所以如果我错了,请纠正我)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.