我在一列中有数据,我想将其拆分为其他列。 列中的数据不一致。
例如:-
974/mt (ICD TKD)
974/mt (+AD 91.27/mt, ICD/TKD)
970-980/mt
970-980/mt
我尝试过使用子字符串,但是找不到任何解决方法
输出应为:-
min |max | unit | description
-------------------------
NULL | 974 | /mt | ICD TKD
NULL | 974 | /mt |+AD 91.27/mt, ICD/TKD
970 | 980 | /mt |NULL
答案 0 :(得分:1)
您可以使用Regex解析信息,然后添加带有解析数据的列。
假设(由于OP中不够清晰)
由于OP没有提到在“最小值”不可用时的假设,因此我将字符串类型用于“最小值/最大值”,但理想情况下应使用apt DataType代替。
public Sample Split(string columnValue)
{
var regex = new Regex(@"(?<min>\d+-)?(?<max>\d+)(?<unit>[\/a-zA-Z]+)\s?(\((?<description>(.+))\))?",RegexOptions.Compiled);
var match = regex.Match(columnValue);
if(match.Success)
{
return new Sample
{
Min = match.Groups["min"].Value,
Max = match.Groups["max"].Value,
Unit = match.Groups["unit"].Value,
Description = match.Groups["description"].Value
};
}
return default;
}
public class Sample
{
public string Min{get;set;}
public string Max{get;set;}
public string Unit{get;set;}
public string Description{get;set;}
}
例如,
var list = new []
{
@"974/mt (ICD TKD)",
@"974/mt (+AD 91.27/mt, ICD/TKD)",
@"970-980/mt",
"970-980/mt"
};
foreach(var item in list)
{
var result = Split(item);
Console.WriteLine($"Min={result.Min},Max={result.Max},Unit={result.Unit},Description={result.Description}");
}
输出
Min=,Max=974,Unit=/mt,Description=ICD TKD
Min=,Max=974,Unit=/mt,Description=+AD 91.27/mt, ICD/TKD
Min=970-,Max=980,Unit=/mt,Description=
Min=970-,Max=980,Unit=/mt,Description=