C# 仅在花括号外的空格上拆分字符串

C# 仅在花括号外的空格上拆分字符串,c#,regex,C#,Regex,我对regex不熟悉,需要一些帮助。我读过一些类似于这个问题的主题,但我不知道如何解决它 我需要在不在一对花括号内的每个空白处拆分一条字符串。花括号外的连续空格应视为单个空格: { TEST test } test { test test} {test test } { 123 } test test 结果: { TEST test } test { test test} {test test } { 123 } test test 这匹配由大括号括

我对regex不熟悉,需要一些帮助。我读过一些类似于这个问题的主题,但我不知道如何解决它

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

{ TEST test } test { test test} {test test  }   { 123 } test  test 
结果:

{ TEST test } 

test 

{ test test} 

{test test  }   

{ 123 } 

test  

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


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

这正是您所需的内容

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());
string Source=“{TEST TEST}TEST{TEST TEST}{TEST TEST}{123}TEST TEST”;
列表结果=新列表();
StringBuilder Temp=新的StringBuilder();
bool内拍=假;
foreach(源代码中的字符c)
{
开关(c)
{
case(char)32://空格
如果(!内拍)
{
添加(Temp.ToString());
Temp=新的StringBuilder();
}
打破
案例(char)123://{
内拍=真;
打破
大小写(字符)125://}
内拍=假;
打破
}
临时附加(c);
}
如果(Temp.Length>0)结果,则添加(Temp.ToString());

这正是您想要的

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());
string Source=“{TEST TEST}TEST{TEST TEST}{TEST TEST}{123}TEST TEST”;
列表结果=新列表();
StringBuilder Temp=新的StringBuilder();
bool内拍=假;
foreach(源代码中的字符c)
{
开关(c)
{
case(char)32://空格
如果(!内拍)
{
添加(Temp.ToString());
Temp=新的StringBuilder();
}
打破
案例(char)123://{
内拍=真;
打破
大小写(字符)125://}
内拍=假;
打破
}
临时附加(c);
}
如果(Temp.Length>0)结果,则添加(Temp.ToString());

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

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

谢谢你们的帮助,伙计们

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

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

谢谢你们的帮助,伙计们

您使用的是什么语言?我使用的是MS Visual Studio C#。您使用的是什么语言?我使用的是MS Visual Studio C#。我计划执行以下操作:string[]test=Regex.Split(line,@“{[^}]+\}\S+”;但是这样我得到的向量只有空值。这个正则表达式不是设计用于
Split
-它是设计用于的。我计划做一些类似的事情:string[]test=regex.Split(line,@“{[^}]+\}\s+”;但这样我得到的向量只有空值。这个正则表达式不是设计用于
Split
,而是设计用于。