Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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/8/selenium/4.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# 如何在每一个引号处拆分_C#_.net_String_Split_C# 2.0 - Fatal编程技术网

C# 如何在每一个引号处拆分

C# 如何在每一个引号处拆分,c#,.net,string,split,c#-2.0,C#,.net,String,Split,C# 2.0,我有一根像这样的线 2,"E2002084700801601390870F" 3,"E2002084700801601390870F" 1,"E2002084700801601390870F" 4,"E2002084700801601390870F" 3,"E2002084700801601390870F" 2,"E2002084700801601390870F" 这是一整条线,你可以想象它在一行上 我想按照他们现在的立场来划分 2,"E2002084700801601390870F" 3,

我有一根像这样的线

2,"E2002084700801601390870F"
3,"E2002084700801601390870F"
1,"E2002084700801601390870F"
4,"E2002084700801601390870F"
3,"E2002084700801601390870F"
2,"E2002084700801601390870F"
这是一整条线,你可以想象它在一行上

我想按照他们现在的立场来划分

2,"E2002084700801601390870F"
3,"E2002084700801601390870F"
1,"E2002084700801601390870F"
4,"E2002084700801601390870F"
3,"E2002084700801601390870F"
2,"E2002084700801601390870F"
我不能改变它的格式。所以我最好的办法是在每一秒都用引号分开。但是我还没有找到任何好的方法。我已经试过了,但是我只得到了一个关于无效参数的错误

另一个问题是该项目正在运行.NET2.0,因此大多数LINQ函数都不可用

谢谢。

试试这个

var regEx = new Regex(@"\d+\,"".*?""");
var lines = regex.Matches(txt).OfType<Match>().Select(m => m.Value).ToArray();
试试这个

var regEx = new Regex(@"\d+\,"".*?""");
var lines = regex.Matches(txt).OfType<Match>().Select(m => m.Value).ToArray();

我看到三种可能性,没有一种特别令人兴奋

  • 正如@dvnrrs所建议的,如果在换行的地方没有逗号,你的状态应该很好。用新奇的东西替换
    ,“
    ”。用你需要的东西替换剩余的
    。用
    ,“
    替换“新奇的东西”来恢复它们。这可能是最可靠的方法——它解决了问题,没有太多的bug空间

  • 遍历字符串,从上一个索引中查找下一个
    的索引,并维护状态机以决定是否对其进行操作

  • 拆分
    s上的字符串,并以最适合您的应用程序的方式重新加入它们


    • 我认为有三种可能性,没有一种特别令人兴奋

      • 正如@dvnrrs所建议的,如果在换行符处没有逗号,你应该保持良好的状态。用新奇的东西替换
        ,“
        ”。将剩余的
        替换为您需要的。将“新奇的东西”替换为
        ,“
        以还原它们。这可能是最可靠的——它解决了问题,没有太多的漏洞空间

      • 遍历字符串,从上一个索引中查找下一个
        的索引,并维护状态机以决定是否对其进行操作

      • 拆分
        s上的字符串,并以最适合您的应用程序的方式重新加入它们


      我知道正则表达式可以处理这个问题,但这里也有一个纯2.0的处理方法。依我的拙见,它更具可读性和可维护性

      using System;
      using System.Collections.Generic;
      
      namespace ConsoleApplication1
      {
          internal class Program
          {
              private static void Main(string[] args)
              {
                  const string data = @"2,""E2002084700801601390870F""3,""E2002084700801601390870F""1,""E2002084700801601390870F""4,""E2002084700801601390870F""3,""E2002084700801601390870F""";
      
                  var parsedData = ParseData(data);
      
                  foreach (var parsedDatum in parsedData)
                  {
                      Console.WriteLine(parsedDatum);
                  }
      
                  Console.ReadLine();
              }
      
              private static IEnumerable<string> ParseData(string data)
              {
                  var results = new List<string>();
                  var split = data.Split(new [] {'"'}, StringSplitOptions.RemoveEmptyEntries);
      
                  if (split.Length % 2 != 0)
                  {
                      throw new Exception("Data Formatting Error");
                  }
      
                  for (var index = 0; index < split.Length / 2; index += 2)
                  {
                      results.Add(string.Format(@"""{0}""{1}""", split[index], split[index + 1]));
                  }
      
                  return results;
              }
          }
      }
      
      使用系统;
      使用System.Collections.Generic;
      命名空间控制台应用程序1
      {
      内部课程计划
      {
      私有静态void Main(字符串[]args)
      {
      常量字符串数据=@“2”、“E20020847008011601390870F”3、“E20020847008011601390870F”1、“E20020847008011601390870F”4、“E20020847008011601390870F”3、“E20020847008011601390870F”;
      var parsedData=ParseData(数据);
      foreach(parsedData中的var parseddatam)
      {
      Console.WriteLine(parsedDatum);
      }
      Console.ReadLine();
      }
      私有静态IEnumerable ParseData(字符串数据)
      {
      var results=新列表();
      var split=data.split(新[]{'''},StringSplitOptions.RemoveEmptyEntries);
      如果(拆分长度%2!=0)
      {
      抛出新异常(“数据格式错误”);
      }
      对于(var指数=0;指数
      我意识到正则表达式可以处理这个问题,但这里也有一个纯2.0的处理方法。在我看来,它更具可读性和可维护性

      using System;
      using System.Collections.Generic;
      
      namespace ConsoleApplication1
      {
          internal class Program
          {
              private static void Main(string[] args)
              {
                  const string data = @"2,""E2002084700801601390870F""3,""E2002084700801601390870F""1,""E2002084700801601390870F""4,""E2002084700801601390870F""3,""E2002084700801601390870F""";
      
                  var parsedData = ParseData(data);
      
                  foreach (var parsedDatum in parsedData)
                  {
                      Console.WriteLine(parsedDatum);
                  }
      
                  Console.ReadLine();
              }
      
              private static IEnumerable<string> ParseData(string data)
              {
                  var results = new List<string>();
                  var split = data.Split(new [] {'"'}, StringSplitOptions.RemoveEmptyEntries);
      
                  if (split.Length % 2 != 0)
                  {
                      throw new Exception("Data Formatting Error");
                  }
      
                  for (var index = 0; index < split.Length / 2; index += 2)
                  {
                      results.Add(string.Format(@"""{0}""{1}""", split[index], split[index + 1]));
                  }
      
                  return results;
              }
          }
      }
      
      使用系统;
      使用System.Collections.Generic;
      命名空间控制台应用程序1
      {
      内部课程计划
      {
      私有静态void Main(字符串[]args)
      {
      常量字符串数据=@“2”、“E20020847008011601390870F”3、“E20020847008011601390870F”1、“E20020847008011601390870F”4、“E20020847008011601390870F”3、“E20020847008011601390870F”;
      var parsedData=ParseData(数据);
      foreach(parsedData中的var parseddatam)
      {
      Console.WriteLine(parsedDatum);
      }
      Console.ReadLine();
      }
      私有静态IEnumerable ParseData(字符串数据)
      {
      var results=新列表();
      var split=data.split(新[]{'''},StringSplitOptions.RemoveEmptyEntries);
      如果(拆分长度%2!=0)
      {
      抛出新异常(“数据格式错误”);
      }
      对于(var指数=0;指数
      它有换行符吗?为什么不用逗号分割,然后两两重新组合字段?你对结果字符串做了什么?获取每个第二个引号的索引并在那里拆分。来源是什么?如果它是一个文件,您可以使用ReadLines如果您的所有数据都是固定宽度的,只需使用从零开始的索引。它是否有换行符?为什么不用逗号拆分,然后两两重新组合字段?你对结果字符串做了什么?获取每个第二个引号的索引并在那里拆分。来源是什么?如果它是一个文件,您可以使用ReadLines如果您的所有数据都是固定宽度的,只需使用从零开始的索引。您需要将
      *
      更改为
      *?
      [^”]*
      因为topic starter提到它是单行。
      Select
      ToArray
      在.NET 2.0中不可用。添加了.NET 2的版本。您需要将
      *
      更改为
      *?
      [^”]*
      因为topic starter提到它是单行。
      Select
      ToArray
      在.NET 2.0中不可用。添加了.NET 2.0的版本