c# - 我想将列数据拆分为不同的列
问题描述
我在一列中有数据,我想将其拆分为不同的列。列中的数据不一致。
例如:-
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
解决方案
您可以使用 Regex 解析信息,然后使用解析的数据添加列。
假设(由于 OP 中缺乏明确性)
- 最小值是可选的
- 如果存在,Min Value 后跟一个“/”,然后是 Max Value
- 描述是可选的
由于 OP 没有提到当 Min Value 不可用时要假设什么,所以我使用字符串类型作为 Min/Max 值,但理想情况下应该用 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=
推荐阅读
- php - How to get new emails on the first try with imap_open in php
- bash - Adding keys to EC2 instance using terraform automation
- reactjs - Having multiple API calls in one componentDidMount - possible?
- flutter - streambuilder not displaying data in list
- flutter - How can I Focus on 1 textfield only in a cell of a datatable in flutter?
- c# - C# Json - extract a list of values from a JsonArray
- excel - Run time error '429' ActiveX component can't create object error while Scripting.FileSystemObject
- mongodb - How can I connect to an Atlas cluster with the SRV connection string format using ReactiveMongo?
- javascript - Using React router link inside template string does not working
- performance-testing - Load runner Ajax 真正的客户端协议脚本录制问题