如何拆分此字符串分割字符串与“在C#
1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1
,并获得该字符串数组作为结果
1014
'0,1031,1032,1034,1035,1036'
0
0
1
1
0
1
0
-1
1
在C#
如何拆分此字符串分割字符串与“在C#
1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1
,并获得该字符串数组作为结果
1014
'0,1031,1032,1034,1035,1036'
0
0
1
1
0
1
0
-1
1
在C#
试试这个,
string line ="1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1" ;
var values = Regex.Matches(line, "(?:'(?<m>[^']*)')|(?<m>[^,]+)");
foreach (Match value in values) {
Console.WriteLine(value.Groups["m"].Value);
}
此答案不保留引号 - 正如问题所要求的那样。 – 2011-12-23 08:42:11
首先上'
分割的字符串(单个)报价后再去comma
(,)。
...只分割偶数索引的字符串,并且再次用单引号包围奇数索引的字符串。然后将所有结果连接为一个数组。 – Rawling 2011-12-23 08:20:47
我认为,这正则表达式应该给你你在找什么:
('(?:[^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?
编辑:
它是如何发挥作用快速的代码片段:
var rx = new Regex("('(?:[^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?");
var text= "1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1";
var matches = rx.Matches(text);
foreach (Match match in matches)
{
System.Console.WriteLine(match.Groups[1].ToString());
}
这是最好的答案,因为它处理字符串内的多个字符串。并保持报价。 – NoLifeKing 2011-12-23 08:34:51
@NoLifeKing我肯定倾向于同意:) – 2011-12-23 08:35:54
这段代码根本不漂亮,但是很有效。 :)(不与字符串中的多个“串”的工作。)
void Main()
{
string stuff = "1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1";
List<string> newStuff = new List<string>();
var extract = stuff.Substring(stuff.IndexOf('\''), stuff.IndexOf('\'', stuff.IndexOf('\'') + 1) - stuff.IndexOf('\'') + 1);
var oldExtract = extract;
extract = extract.Replace(',',';');
stuff = stuff.Replace(oldExtract, extract);
newStuff.AddRange(stuff.Split(new[] {','}));
var newList = newStuff;
for(var i = 0; i < newList.Count; i++)
newList[i] = newList[i].Replace(';',',');
// And newList will be in the format you specified, but in a list..
}
你并不需要一个解析器,你不需要正则表达式。这里是一个非常简单的版本,完美的作品:
var splits = input
.Split('\'')
.SelectMany(
(s,i) => (i%2==0)
? s.Split(new[]{','}, StringSplitOptions.RemoveEmptyEntries)
: new[]{ "'" + s + "'"}
);
这正是描述@AVD + @Rawling ...分割上'
,并拆分只有“连”的结果,然后结合。
using System;
using System.IO;
using Microsoft.VisualBasic.FileIO; //Microsoft.VisualBasic.dll
public class Sample {
static void Main(){
string data = "1014,'0,1031,1032,1034,1035,1036',0,0,1,1,0,1,0,-1,1";
string[] fields = null;
data = data.Replace('\'', '"');
using(var csvReader = new TextFieldParser(new StringReader(data))){
csvReader.SetDelimiters(new string[] {","});
csvReader.HasFieldsEnclosedInQuotes = true;
fields = csvReader.ReadFields();
}
foreach(var item in fields){
Console.WriteLine("{0}",item);
}
}
}
调用正则表达式pro!,检查出各种CSV解析器,它们都处理这个(和更多)。 http://www.filehelpers.com/ – Prescott 2011-12-23 08:19:27
试过String.Split API? – Zenwalker 2011-12-23 08:19:37
正常情况下,当字符串被拆分时,主元字符被删除。在这种情况下,第二个结果包含在撇号中。输入字符串中是否会有两个以上的撇号?如果是这样,会发生什么? – Amy 2011-12-23 08:20:02