在 C# 中解析文本字段以获取数据的问题
Problem with Text field parsing to get data in C#
我收到这种格式的数据。
var data="frame= 159 fps= 51 q=34.0 size= 512kB time=00:00:05.37 bitrate= 780.3kbits/s dup=3 drop=0 speed=1.72x";
要在此处使用定界符,唯一的可能是 space。
但是对于那个 frame= 159
,它在 = 创建问题之后有更多的 spaces。
帧、大小、比特率也有同样的问题。
所以我不能使用定界符或简单的字符串拆分,即 data.Split(" ")
如何解析此处的值以更正 DTO/Object。
public class Template
{
public float Frame {get;set;}
public float Fps {get;set;}
public string Size {get;set;}
public TimeSpan Time {get;set;}
public string Bitrate {get;set;}
public short Dup {get;set;}
public short Drop {get;set;}
public string Speed {get;set;}
}
您可以通过删除不必要的空格来解析 string
到 <key,value>
集合:
var data="frame= 159 fps= 51 q=34.0 size= 512kB time=00:00:05.37 bitrate= 780.3kbits/s dup=3 drop=0 speed=1.72x".Replace(" ", " ");
data = Regex.Replace(data, @"[^\S]+", " ");
data = Regex.Replace(data, @"= ", "=");
var pairs = data.Split(" ");
var dictionary = new Dictionary<string, string>();
foreach (var pair in pairs)
{
var keyAndValue = pair.Split("=");
if (keyAndValue.Length == 2)
{
dictionary.Add(keyAndValue[0], keyAndValue[1]);
}
else
{
throw new InvalidOperationException();
}
}
使用 Regex
删除 =
后的空格
var data = "frame= 159 fps= 51 q=34.0 size= 512kB time=00:00:05.37 bitrate= 780.3kbits/s dup=3 drop=0 speed=1.72x";
data = Regex.Replace(data, @"=\s+", "=");
foreach (var d in data.Split(' '))
{
var kv = d.Split('=');
Console.WriteLine(String.Format("{0}: {1}", kv[0], kv[1]));
}
我收到这种格式的数据。
var data="frame= 159 fps= 51 q=34.0 size= 512kB time=00:00:05.37 bitrate= 780.3kbits/s dup=3 drop=0 speed=1.72x";
要在此处使用定界符,唯一的可能是 space。
但是对于那个 frame= 159
,它在 = 创建问题之后有更多的 spaces。
帧、大小、比特率也有同样的问题。
所以我不能使用定界符或简单的字符串拆分,即 data.Split(" ")
如何解析此处的值以更正 DTO/Object。
public class Template
{
public float Frame {get;set;}
public float Fps {get;set;}
public string Size {get;set;}
public TimeSpan Time {get;set;}
public string Bitrate {get;set;}
public short Dup {get;set;}
public short Drop {get;set;}
public string Speed {get;set;}
}
您可以通过删除不必要的空格来解析 string
到 <key,value>
集合:
var data="frame= 159 fps= 51 q=34.0 size= 512kB time=00:00:05.37 bitrate= 780.3kbits/s dup=3 drop=0 speed=1.72x".Replace(" ", " ");
data = Regex.Replace(data, @"[^\S]+", " ");
data = Regex.Replace(data, @"= ", "=");
var pairs = data.Split(" ");
var dictionary = new Dictionary<string, string>();
foreach (var pair in pairs)
{
var keyAndValue = pair.Split("=");
if (keyAndValue.Length == 2)
{
dictionary.Add(keyAndValue[0], keyAndValue[1]);
}
else
{
throw new InvalidOperationException();
}
}
使用 Regex
删除=
后的空格
var data = "frame= 159 fps= 51 q=34.0 size= 512kB time=00:00:05.37 bitrate= 780.3kbits/s dup=3 drop=0 speed=1.72x";
data = Regex.Replace(data, @"=\s+", "=");
foreach (var d in data.Split(' '))
{
var kv = d.Split('=');
Console.WriteLine(String.Format("{0}: {1}", kv[0], kv[1]));
}