我有一段多种格式的文本,我想尝试创建一个涵盖所有这些格式的方法。我知道在哪里可以分割这些行,但是,我不确定如何定义它。
案文的一个例子:
.0 index .0.label unicode" Area" .0.value unicode" 6WAY DB" .1 index .1.label unicode" SubStation" .1.value unicode" E782DB257" .2(等......)
我想将这些行拆分为" .0"," .1"等,以便我的列表如下所示:
.0指数
.0.label unicode" Area"
.0.value unicode" 6WAY DB"
.1指数
.1.label unicode" SubStation"
这将使数据更易于操作。但是,由于值的变化取决于行,我不能简单地将值设置为常规字符串。相反,我在考虑陈述更像是
string Split = "." + n.IsInt();
或类似的东西。但是,我找不到任何有用的东西。
答案 0 :(得分:5)
如果我了解您,您可以使用正则表达式替换
执行以下操作var input = ".0 index .0.label unicode \"Area\" .0.value unicode \"6WAY DB\" .1 index .1.label unicode \"SubStation\" .1.value unicode \"E782DB257\" .2 (etc...)";
var result = Regex.Replace(input, @"\.\d", $"{Environment.NewLine}$&");
Console.WriteLine(result);
或实际拆分
var lines = result.Split(new[]{Environment.NewLine},StringSplitOptions.None);
foreach (var line in lines)
Console.WriteLine(line);
<强>输出强>
.0 index
.0.label unicode "Area"
.0.value unicode "6WAY DB"
.1 index
.1.label unicode "SubStation"
.1.value unicode "E782DB257"
.2 (etc...)
解释
.
匹配任何字符(行终止符除外)
\d
匹配一个数字(等于[0-9]
) $&
替换原始匹配
答案 1 :(得分:0)
如果您的字符串遵循修复格式并且您想从字符串中提取值,那么您可以为此类似的东西实现自定义函数。
function splitCustom(str){
var retVal=[];
str = str.split('.0 index')[1].trim();
var totalRecord=str[str.lastIndexOf(' index')-1];
for(var i=0;i<=totalRecord;i++){
var obj={};
var substr=str.split("." + (i+1) + ' index');
var curRecord="";
if(substr.length>1){
curRecord=substr[0].trim();
str = substr[1].trim();
}
else{
curRecord=str;
}
obj.index=i;
var labelString=curRecord.split("." + i + ".")[1].trim();
obj.label=labelString.substr(labelString.indexOf('"')+1, labelString.lastIndexOf('"')-labelString.indexOf('"')-1);
var valueString=curRecord.split("." + i + ".")[2].trim();
obj.value=valueString.substr(valueString.indexOf('"')+1, valueString.lastIndexOf('"')-valueString.indexOf('"')-1);
retVal.push(obj);
}
return retVal;
}
var str='.0 index .0.label unicode "Area" .0.value unicode "6WAY DB" .1 index .1.label unicode "SubStation" .1.value unicode "E782DB257"';
var response = splitCustom(str);
输出
[
{"index":0,"label":"Area","value":"6WAY DB"},
{"index":1,"label":"SubStation","value":"E782DB257"}
]