C#正则表达式

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:05:02

需要一个正则表达式来匹配{}

这是我的要求。

如果输入类似

avsg{sdhsd{jh{ashdhas}hdasjhd}

输出应该是

avsgsdhsdjh{ashdhas}hdasjhd

我必须修剪{}的所有出现,除非对于{存在匹配的}

EDIT——一些进一步的例子:

不允许使用嵌套的方括号。我们只允许"{"answers"}"出现一次,并删除所有括号。再举几个例子。

1( 。IN:afhad{adfh}jsdfhd输出:afhad{adfh}jsdfhd

2( 。IN:afhad{a{dfh}jsdfhd输出:afhada{dfh}jsdfhd

3( 。IN:afh{ad{adfh}jsdf}hd输出:afhad{adfh}jsdfhd

4( 。输入:afhad{adfhjsdfhd输出:afhadadfhjsondfhd

C#正则表达式

        string s = @"avsg{sdhsd{jh{ashdhas}hdasjhd}";
        string newS = Regex.Replace(s, @"^(.*)('{.*?'})(.*)$", m =>
                m.Groups[1].Value.Replace("{", "").Replace("}", "") +
                m.Groups[2].Value +
                m.Groups[3].Value.Replace("{","").Replace("}", "")
        );
s = Regex.Replace(s, @"([^{}]*(?:'{[^{}]*'}[^{}]*)*)(?:[{}]|$)", "$1");

CCD_ 7匹配除{}之外的任何字符中的零个或多个。

'{[^{}]*'}匹配一个左大括号和一个右大括号,它们之间除了大括号之外还有任何数量的任何字符。

总之,([^{}]*(?:'{[^{}]*'}[^{}]*)*)匹配零个或多个非大括号或匹配的大括号对,并将它们捕获到组#1中,然后(?:[{}]|$)匹配下一个未配对的大括号或输入的末尾。用$1(组#1的内容(替换匹配有效地删除了未配对的大括号。