如何在每隔一个引号分割

时间:2014-03-21 13:13:56

标签: c# .net string split c#-2.0

我有一个看起来像这样的字符串

2,"E2002084700801601390870F"
3,"E2002084700801601390870F"
1,"E2002084700801601390870F"
4,"E2002084700801601390870F"
3,"E2002084700801601390870F"

这是一整个字符串,你可以想象它在一行上。

我想像现在这样分开这个

2,"E2002084700801601390870F"

我无法改变其格式化方式。所以我最好的选择是每隔一个引号分开。但我还没有找到任何好办法。我已尝试过此https://stackoverflow.com/a/17892392/2914876但我只收到有关无效辩论的错误。

另一个问题是该项目运行的是.NET 2.0,因此大多数LINQ功能都无法使用。

谢谢。

3 个答案:

答案 0 :(得分:5)

试试这个

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

在.Net 2上使用foreach而不是LINQ Select

Regex regEx = new Regex(@"\d+\,"".*?""");
foreach(Match m in regex.Matches(txt))
{
    var curLine = m.Value;
}

答案 1 :(得分:1)

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

  • 正如@dvnrrs建议的那样,如果你没有逗号,你就应该处于良好状态。用新颖的东西取代,"。将剩余的"替换为您需要的内容。取代&#34;新颖的东西&#34;与,"一起恢复它们。这可能是最坚实的 - 它解决了这个问题,没有太多的错误空间。

  • 遍历字符串,查找上一个索引中下一个"的索引,并维护状态机以决定是否操作它。

  • 拆分"上的字符串,并以适用于您应用的最佳方式重新加入。

答案 2 :(得分:1)

我意识到正则表达式会处理这个,但这里也是一个纯粹的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;
        }
    }
}