C# 如何在c中使用双引号拆分逗号?
如何拆分上面的字符串 我需要一个像这样的答案C# 如何在c中使用双引号拆分逗号?,c#,csv,C#,Csv,如何拆分上面的字符串 我需要一个像这样的答案 string strExample = "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\","; 带拆分选项 提前谢谢 string[] arrExample = YourFunc(strExample); arrExample[0] == "10553210"; arrExample[1] == "na"; arrEx
string strExample =
"\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\",";
带拆分选项
提前谢谢
string[] arrExample = YourFunc(strExample);
arrExample[0] == "10553210";
arrExample[1] == "na";
arrExample[2] == "398,633,000";
...
可以,但您的代码无法编译。我想你的意思是:
string[] arrExample = strExample.Split(",");
如果这不是你的意思,请更正问题。假设你的意思是:
string strExample = "10553210,na,398,633,000,20130709,20130502,20120724";
拆分,然后选择子字符串:
string strExample = "\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";
结果:
你可以这样做
string[] parts = strExample.Split(',').Select(x => x.Substring(1, x.Length - 2)).ToArray();
如果双引号要包含在示例字符串中,则需要对其进行转义。您可以拆分第一个和最后一个条目,您必须清除最后一个和第一个条目中的双引号:
strExample.Split(',');
这是一个简单的方法
string[] arr = strExample .Split(new string[] { "\",\"" },
StringSplitOptions.None);
//remove the extra quotes from the last and the first entry
arr[0] = arr[0].SubString(1,arr[0].Length - 1);
int last = arr.Length - 1;
arr[last] = arr[last].SubString(0,arr[last].Length - 1);
您可以不按逗号分割,而是按整个字符串\、\。 不要忘记修剪前导和尾随引号:
使用来自Jodrell的示例
String strExample =
"\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";
string[] arrExample = St.Trim('"').Split(new String[] {"\",\""}, StringSplitOptions.None);
这对我有用
private string[] SplitFields(string csvValue)
{
//if there aren't quotes, use the faster function
if (!csvValue.Contains('\"') && !csvValue.Contains('\''))
{
return csvValue.Trim(',').Split(',');
}
else
{
//there are quotes, use this built in text parser
using(var csvParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(csvValue.Trim(','))))
{
csvParser.Delimiters = new string[] { "," };
csvParser.HasFieldsEnclosedInQuotes = true;
return csvParser.ReadFields();
}
}
}
您知道不能将字符串构建为逗号分隔值的列表,对吗?您的实际字符串是什么样子的?在您的示例中,这不是一个字符串。这里给出的大多数答案都是正确的,但您仍在搜索中。这是我最终得到的答案strFiledata。Splitnew string[]{\,\},StringSplitOptions.None@janakiakula,请不要用评论来回答你自己的问题。这里有几个答案与您的评论相同。请礼貌地投票选出你认为有用的答案。然后把最早的正确答案标记为答案。否则,下一次,没有人会想回答你的问题,你的帖子对以后的访问者来说基本上是无用的。谢谢你的回答,我需要这个字符串[]arrExample=strExample.Splitnew字符串[]{\,\},然后我想@peer的答案可能就是你想要的。一个非常好的内置解决方案。您将我从不必要的搜索和正则表达式中解救出来。请添加一些解释。
using Microsoft.VisualBasic.FileIO;
IList<string> arrExample;
using(var csvParser = new TextFieldParser(new StringReader(strExample))
{
fields = csvParser.ReadFields();
}
String strExample =
"\"10553210\",\"na\",\"398,633,000\",\"20130709\",\"20130502\",\"20120724\"";
string[] arrExample = St.Trim('"').Split(new String[] {"\",\""}, StringSplitOptions.None);
private string[] SplitFields(string csvValue)
{
//if there aren't quotes, use the faster function
if (!csvValue.Contains('\"') && !csvValue.Contains('\''))
{
return csvValue.Trim(',').Split(',');
}
else
{
//there are quotes, use this built in text parser
using(var csvParser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(csvValue.Trim(','))))
{
csvParser.Delimiters = new string[] { "," };
csvParser.HasFieldsEnclosedInQuotes = true;
return csvParser.ReadFields();
}
}
}
public static IEnumerable<string> SplitCSV(string strInput)
{
string[] str = strInput.Split(',');
if (str == null)
yield return null;
StringBuilder quoteS = null;
foreach (string s in str)
{
if (s.StartsWith("\""))
{
if (s.EndsWith("\""))
{
yield return s;
}
quoteS = new StringBuilder(s);
continue;
}
if (quoteS != null)
{
quoteS.Append($",{s}");
if (s.EndsWith("\""))
{
string s1 = quoteS.ToString();
quoteS = null;
yield return s1;
}
else
continue;
}
yield return s;
}
}
static void Main(string[] args)
{
string s = "111,222,\"33,44,55\",666,\"77,88\",\"99\"";
Console.WriteLine(s);
var sp = SplitCSV(s);
foreach (string s1 in sp)
{
Console.WriteLine(s1);
}
Console.ReadKey();
}