gpt4 book ai didi

c# - 如何解析这个?

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:07 26 4
gpt4 key购买 nike

我需要解析出具有以下结构的字符串

x:{a,b,c,}, y:{d,e,f} 等

所有条目都是数字,所以它看起来像这样

411:{1,2,3},241:{4,1,2} 等

忘记提及:{} 之间的逗号分隔条目数没有上限,但必须至少有一个条目。

  1. 我需要获得唯一的列表: 之前的数字,在上面的例子中 411,241

这可以用正则表达式完成吗?如何做?

最佳答案

正则表达式:

(?<1>[\d]+):{(?<2>\d+),(?<3>\d+),(?<4>\d+)}

对于数据:

411:{1,2,3},241:{4,1,2},314:{5,6,7}

将产生以下匹配/组集合:

Match 0
Group 0: 411:{1,2,3}
Group 1: 411
Group 2: 1
Group 3: 2
Group 4: 3

Match 1
Group 0: 241:{4,1,2}
Group 1: 241
Group 2: 4
Group 3: 1
Group 4: 2

Match 2
Group 0: 314:{5,6,7}
Group 1: 314
Group 2: 5
Group 3: 6
Group 4: 7

您可以使用以下代码:

string expression = "(?<1>[\d]*):{(?<2>\d),(?<3>\d),(?<4>\d)}";
string input = "411:{1,2,3},241:{4,1,2},314:{5,6,7}";

Regex re = new Regex(expression, RegexOptions.IgnoreCase);

MatchCollection matches = re.Matches(input);

for (int i = 0; i < matches.Count; i++)
{
Match m = matches[i];
// for i==0
// m.groups[0] == 411:{1,2,3}
// m.groups[1] == 411
// m.groups[2] == 1
// m.groups[3] == 2
// m.groups[4] == 4
}

更新无法使用纯正则表达式和列表中可变数量的项目 - 也许其他人可以在这里插话。一个简单的解决方案是:

string expression = "(?<1>[\d]+):{(?<2>[\d,?]+)}";
string input = "411:{1,2,3,4,5},241:{4,1,234}";

Regex re = new Regex(expression, RegexOptions.IgnoreCase);

MatchCollection matches = re.Matches(input);

for (int i = 0; i < matches.Count; i++)
{
Match m = matches[i];
// for i==0
// m.groups[0] == "411:{1,2,3}"
// m.groups[1] == "411"
// m.groups[2] == "1,2,3"
int[] list = m.Groups[1].Split(",");
// now list is an array of what was between the curly braces for this match
}

上面的匹配列表:

Match 0
Group 0: 411:{1,2,3,4,5}
Group 1: 411
Group 2: 1,2,3,4,5

Match 1
Group 0: 241:{4,1,234}
Group 1: 241
Group 2: 4,1,234

关于c# - 如何解析这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1631716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com