我有一个看起来像这样的字符串
2,"E2002084700801601390870F"
3,"E2002084700801601390870F"
1,"E2002084700801601390870F"
4,"E2002084700801601390870F"
3,"E2002084700801601390870F"
这是一整个字符串,你可以想象它在一行上。
我想像现在这样分开这个
2,"E2002084700801601390870F"
我无法改变其格式化方式。所以我最好的选择是每隔一个引号分开。但我还没有找到任何好办法。我已尝试过此https://stackoverflow.com/a/17892392/2914876但我只收到有关无效辩论的错误。
另一个问题是该项目运行的是.NET 2.0,因此大多数LINQ功能都无法使用。
谢谢。
答案 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;
}
}
}