使用嵌套大括号删除大括号的正则表达式

时间:2009-12-15 01:03:58

标签: c# regex

这是我的字符串:"This Is {{ dsfdf {{dsfsd}} ewrwrewr }} My Result"

我想删除带有内容的外部花括号。 结果应为"This Is My Result"

这是我目前最好的镜头:

Text = Regex.Replace(Text, "{{([^}]*)}}", String.Empty);

但效果不佳。我得到"This Is ewrwrewr }} My Text"

也许它应该通过平衡匹配来解决......

如果有人可以帮助我解决问题,我会非常欣赏,因为虽然有很多尝试但我自己也做不到。

2 个答案:

答案 0 :(得分:2)

一种简单但缓慢的方法是多次应用正则表达式,直到没有更多变化:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string s = "This Is {{ dsfdf {{dsfsd}} ewrwrewr }} My Result";

        Regex regex = new Regex("{{({?}?[^{}])*}}");
        int length;
        do
        {
            length = s.Length;
            s = regex.Replace(s, "");
        } while (s.Length != length);

        Console.WriteLine(s);
     }
}

答案 1 :(得分:1)

您如何看待:

string test = "This Is {{ dsfdf {{dsfsd}} \n jkhhjk ewrwrewr }} My Result";
Console.WriteLine(Regex.Replace(test, "{{.*}}", String.Empty, RegexOptions.Singleline));

没有“正则表达式”的版本:

string test = "This Is {{ dsfdf {{dsfsd}} \n jkhhjk ewrwrewr }} My Result";
int startIndex = test.IndexOf("{");
int length = test.LastIndexOf("}") - startIndex + 1;
Console.WriteLine(test.Replace(test.Substring(startIndex, length), String.Empty));