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上的字符串,并以最适合您的应用程序的方式重新加入它们“
- 我认为有三种可能性,没有一种特别令人兴奋
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的版本