我正在尝试从文本中提取数据。这是更大的文本。为了更好的理解。我有一个简单的类测试结果,那就是枚举。
class Test{
private Result result;
public Test(string text){
this.Result = FindProblem(text);
}
......
public enum Result
{
SUCCESS = 1,
FAIL = 2,
NONE = 3
}
}然后我有短信:
今天01:05:(NAME)备份失败--操作遇到错误。(姓名) 备份失败:找不到文件(名称) DISK_OPEN_ERROR 今天01:04:(名称)成功备份的42,73 MB (压缩为7,32 MB)(持续时间:1分钟) 今天00:59:(名称)成功备份支持的3,41 GB (压缩到379,17 MB)。(持续时间:4分钟)
我希望每一行返回一个测试对象,结果如下:结果:失败的或结果:成功的。
方法,用于从文本返回所有对象。
public Result FindResult(string text)
{
var splitText = text.Split("\n").ToList();
Result r = Result.NONE;
foreach (var item in splitText)
{
if (item.Contains("Failed"))
{
r = Result.FAIL;
}
else
{
r = Result.SUCCESS;
}
}
return r;
}但它只返回结果成功。预期产出
result:FAIL
result:SUCCESS
result:SUCCESS发布于 2022-10-28 11:18:14
您可以在至少两个换行符上拆分,然后使用Select映射列表中的项,并检查其中是否包含“失败”
如果是,则返回Result.FAIL,否则返回Result.SUCCESS,因此函数的返回类型为List<Result>。
class Test
{
private Result result;
public enum Result
{
SUCCESS = 1,
FAIL = 2,
NONE = 3
}
public List<Result> FindResult(string text)
{
return Regex
.Split(text, @"\r?\n\s*\r?\n")
.Select(s => s.Contains("Failed") ? Result.FAIL : Result.SUCCESS)
.ToList();
}
}然后可以循环返回列表中的项。
Test test = new Test();
var results = test.FindResult(input);
foreach(var r in results) {
Console.WriteLine(r);
}输出
FAIL
SUCCESS
SUCCESS看一个C#演示。
https://stackoverflow.com/questions/74234107
复制相似问题