gpt4 book ai didi

c# - 反序列化包含一组重复元素的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:49 24 4
gpt4 key购买 nike

我得到的响应字符串如下:

Navigator[sizenavigator:INTEGER (Size) 
modifier:size
score:1.300855517 type:INTEGER unit:kB
hits:7744
hitsUsed:7744
ratio:1
min:65
max:66780
mean:3778
sum: 29259942
frequencyError:-1
entropy:1.300855533
points:
Name:Less than 1
Interval: ->1023
Value:[;1023]
Count:1121
Name:Between 1 and 2
Interval: 1024->2047
Value:[1024;2047]
Count:3325
Name:Between 2 and 3
Interval: 2048->3071
Value:[2048;3071]
Count:1558
Name:More than 3
Interval: 3072->
Value:[3072;]
Count:1740
]

如您所见,Name, Interval, Value, Count 正在重复,这将重复 'n' 次。次。我如何通过为此进程创建类型(类)来反序列化它?

如果这个类有点像:

class Navigator
{
string modifier;
string score;
.
.
string Name;
string Interval;
string Value;
int Count;
}

我们如何获取 Name, Interval, Value, Count 的重复值??

提前致谢。

最佳答案

我建议您自由使用正则表达式来提取您需要的信息。这增加了很多复杂性,但您的另一个选择是 tokenisation考虑到输入,IMO 实现起来同样复杂。

修饰符的正则表达式非常简单。它要求您查找文字字符串“modifier:”并捕获 : 之后的任何内容,直到行尾 - 由 crlf \r\n 标记。您可以使用捕获组来提取所需的信息,因此正则表达式为:

modifier:(.*[^\r\n])

分数的正则表达式非常简单,查找文字字符串 score: 并捕获 : 之后的所有内容,直到行尾:

score:(.*[^\n\r])

你的重复项目的正则表达式要复杂得多,并且再次使用捕获组(这次命名是为了更容易提取它们)来获取你感兴趣的信息。这已经过测试并且有效:

Name:\s*(?<name>.*[^\r\n])\s*\r\n\s+Interval:\s(?<interval>\d*\-\>\d*)\s*\r\n\s+Value:\s*(?<value>\[\d*;\d*\])\s*\r\n\s+Count:\s*(?<count>\d+) 

给定一个名为 input 的变量中的输入数据,您将按如下方式使用此代码:

var modifierRegex = new Regex(@"modifier:(.*[^\r\n])");
var scoreRegex = new Regex(@"score:(.*[^\n\r])");
var itemsRegex = new Regex(@"Name:\s*(?<name>.*[^\r\n])\s*\r\n\s+Interval:\s(?<interval>\d*\-\>\d*)\s*\r\n\s+Value:\s*(?<value>\[\d*;\d*\])\s*\r\n\s+Count:\s*(?<count>\d+)");
var modifierMatch = modifierRegex.Match(input);
var scoreMatch = scoreRegex.Match(input);
var itemsMatches = itemsRegex.Matches(input);

var modifier = modifierMatch.Groups[1].Value;
var score = scoreMatch.Groups[1].Value;
foreach(Match match in itemsMatches)
{
var name = match.Groups["name"].Value;
var interval = match.Groups["interval"].Value;
var value = match.Groups["value"].Value;
var count = match.Groups["count"].Value;
}

实例:http://rextester.com/rundotnet?code=OQTZE85773

这向您展示了如何提取所需的值。现在使用数据结构,例如 described by @Jeremy McGee并尽可能多地阅读他所描述的值(value)观。

关于c# - 反序列化包含一组重复元素的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660537/

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