Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在“0”上拆分字符串;“未定义”;变量_C#_.net - Fatal编程技术网

C# 在“0”上拆分字符串;“未定义”;变量

C# 在“0”上拆分字符串;“未定义”;变量,c#,.net,C#,.net,我有一段文本有多种格式,我想尝试创建一个包含所有格式的方法。我知道在哪里可以划分这些线,但是,我不确定如何定义这条线 文本示例: .0索引.0.标记unicode“区域”。0.值unicode“6WAY DB”。1索引。1.标记unicode“变电站”。1.值unicode“E782DB257”。2(等) 我想在“.0”和“.1”等上拆分这些行,以便我的列表如下所示: .0索引 .0.将unicode标记为“区域” .0.0值unicode“6WAY DB” .1索引 .1.标签unicode“

我有一段文本有多种格式,我想尝试创建一个包含所有格式的方法。我知道在哪里可以划分这些线,但是,我不确定如何定义这条线

文本示例:

.0索引.0.标记unicode“区域”。0.值unicode“6WAY DB”。1索引。1.标记unicode“变电站”。1.值unicode“E782DB257”。2(等)

我想在“.0”和“.1”等上拆分这些行,以便我的列表如下所示:

.0索引
.0.将unicode标记为“区域”
.0.0值unicode“6WAY DB”
.1索引
.1.标签unicode“变电站”

这将使数据更易于操作。但是,由于值随行的不同而变化,因此我不能简单地将值作为常规字符串。相反,我想说的是

string Split = "." + n.IsInt();

或者类似的东西。但是,我找不到任何有效的方法。

如果我理解您的意思,您可以使用regex replace执行以下操作

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]

$&
替换为原始匹配项

如果字符串采用固定格式,并且希望从字符串中提取值,则可以为该字符串实现如下自定义函数

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);

使用正则表达式怎么样?我对正则表达式不是很精通,所以我可能遗漏了一些明显的东西,但是如果
{1}
是一个“无意义的量词”,那么为什么要包含它呢?@TheGeneral这很好!非常感谢!但我确实遇到了一个错误-如果该行有另一个
@“\.\d”
,它也会在那里拆分该行(例如“.1.value Unicode”.6WAY DB”)。因此我改为使用这个正则表达式:
@(\.\d index)\.\d\.label)\.\d\.value)
@Ben,看起来像票据
[
    {"index":0,"label":"Area","value":"6WAY DB"},
    {"index":1,"label":"SubStation","value":"E782DB257"}
]