如何每隔一个引号进行拆分
本文关键字:拆分 一个 何每隔 | 更新日期: 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;
}
}
}