2009-12-15 148 views
0

这是我的字符串:"This Is {{ dsfdf {{dsfsd}} ewrwrewr }} My Result"使用嵌套大括号去除大括号的正则表达式

我想删除与他们的内容外大括号。 结果应该是"This Is My Result"

这是我目前最好的射手:

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

,但它不能很好地工作。我得到"This Is ewrwrewr }} My Text"

也许应该与资产负债匹配来解决......

我会非常感激,如果有人可以帮助我解决这个问题,因为虽然多次尝试我不能做我自己。

+0

“a {{b}} c}}”的结果应该是什么? - “ac}}”?,“a”或错误? – 2009-12-15 01:19:40

+0

这真的需要用正则表达式来解决吗?一个简单的迭代解决方案可能会更快,更容易编写和维护。 – Aaronaught 2009-12-15 01:21:52

回答

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); 
    } 
} 
+0

这种方式更强大,并处理多层次的嵌套... – 2009-12-15 01:19:32

+0

这一个伟大的作品!感谢您的快速回答... 我不知道天才在这里挂着什么:)) – Tom 2009-12-15 01:26:40

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)); 
+2

如果你的真实情况和你的例子一样简单,这应该没问题! – 2009-12-15 01:18:42

+1

这不会也删除支架组之间的东西吗? {{1 {{2}} 3}} 4 {{5}} < - 也删除4? – 2009-12-15 01:19:00

+0

感谢您的快速回复......! 它的工作原理!但是......我之前没有提到它......我的错误。 它有多行它。一个更好的例子是: “This is {{dsfdf {{dsfsd}} \ n jkhhjk ewrwrewr}}我的结果” – Tom 2009-12-15 01:20:03