C# 仅在花括号外的空格上拆分字符串
我对regex不熟悉,需要一些帮助。我读过一些类似于这个问题的主题,但我不知道如何解决它 我需要在不在一对花括号内的每个空白处拆分一条字符串。花括号外的连续空格应视为单个空格: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 这匹配由大括号括
{ 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
,而是设计用于。