0

我是正则表达式的新手,我需要一些帮助。我阅读了一些与此问题类似的主题,但我不知道如何解决它。

我需要在不在一对花括号内的每个空格上拆分一个字符串。花括号外的连续空格应视为一个空格:

{ TEST test } test { test test} {test test  }   { 123 } test  test 

结果:

{ TEST test } 

test 

{ test test} 

{test test  }   

{ 123 } 

test  

test
4

3 回答 3

3
\{[^}]+\}|\S+

这匹配由花括号括起来的任何字符的运行,或非空格字符的运行。从字符串中获取它的所有匹配项应该可以为您提供所需的内容。

于 2013-01-04T22:06:11.207 回答
1

这正是你想要的...

string Source = "{ TEST test } test { test test} {test test } { 123 } test test";
List<string> Result = new List<string>();
StringBuilder Temp = new StringBuilder();
bool inBracket = false;
foreach (char c in Source)
{
    switch (c)
    {
        case (char)32:       //Space
            if (!inBracket)
            {
                Result.Add(Temp.ToString());
                Temp = new StringBuilder();
            }
            break;
        case (char)123:     //{
            inBracket = true;
            break;
        case (char)125:      //}
            inBracket = false;
            break;
    }
    Temp.Append(c);
}
if (Temp.Length > 0) Result.Add(Temp.ToString());
于 2013-01-04T22:16:44.397 回答
0

我使用以下方法解决了我的问题:

StringCollection information = new StringCollection();  
foreach (Match match in Regex.Matches(string, @"\{[^}]+\}|\S+"))  
{  
   information.Add(match.Value);  
}

谢谢你们的帮助!!!

于 2013-01-07T20:50:51.700 回答