如何每隔一个引号进行拆分

本文关键字:拆分 一个 何每隔 | 更新日期: 2023-09-27 17:51:11

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

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

这是一整根绳子,你可以想象它在一排。

我想按照他们现在的立场来划分,就像一样

2,"E2002084700801601390870F"

我无法更改它的格式。所以我最好的选择是在每一秒的引号处分开。但我还没有找到任何好的方法来做到这一点。我试过这个https://stackoverflow.com/a/17892392/2914876但我只得到一个关于无效论点的错误。

另一个问题是,这个项目运行的是.NET 2.0,所以大多数LINQ函数都不可用。

谢谢。

如何每隔一个引号进行拆分

试试这个

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

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

  • 正如@dvnrrs所建议的,如果你有换行符的地方没有逗号,你的状态应该很好。用新颖的东西代替,"。将剩余的"更换为所需的。用,"替换"新奇的东西"以恢复它们。这可能是最可靠的——它解决了问题,没有太多的漏洞空间。

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

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

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