首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到带正则表达式的所有耦合括号?

问如何找到带正则表达式的所有耦合括号?
EN

Stack Overflow用户
提问于 2009-11-13 02:49:12
回答 2查看 386关注 0票数 0

我希望有一个正则表达式来查找所有的花括号,并将它们替换为其他字符串。

例如,我希望将"{foo}“替换为"FOO”,将"{bar}“替换为"BAR”,将"{}“替换为”E 110空E 211“。如果输入为"abc { FOO } def { BAR } {BAR}“,则输出为"abc FOO def BAR空”。

不允许嵌套括号或不耦合的括号。如果字符"{“或"}”是必需的。应该加倍。因此,"{ def }“就是”{ def }“。

不允许{}中的其他字符串。比如说,我只想要"{foo}“和"{bar}”。因此,"abc {xyz} def“应该被识别为无效输入。

EN

回答 2

Stack Overflow用户

发布于 2009-11-13 02:56:02

如果你有负面的后置/看台,可用:

代码语言:javascript
复制
(?<!{){([a-z]+)}(?!})

并替换为匹配组的值。

([a-z]+)匹配包含的字符串,(?<!{)确保在{之前没有第二个{,(?!})确保在}之后没有第二个}。

如果你没有后视镜,那么

代码语言:javascript
复制
(?^|[^{]){([a-z]+)}(?$|[^})
票数 3
EN

Stack Overflow用户

发布于 2009-11-13 07:39:57

我将首先使用EMPTY替换EMPTY,而不使用正则表达式。

然后使用

代码语言:javascript
复制
(?<!{){(foo|bar)}(?!})

匹配{foo}或{bar},但不匹配{}、{{anything}}或{anything}

反向引用1号包含匹配的文本。

所以代码片段看起来就像

代码语言:javascript
复制
Regex matches = new Regex(@"(?<!\{)\{(foo|bar)\}(?!\})", RegexOptions.IgnoreCase);
resultString = matches.Replace(subjectString, "$1".ToUpper());

(我希望在字符串上调用ToUpper()是有效的;我不知道C#,所以如果我错了请纠正我)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1726823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档