我使用.NET的String.Split方法使用逗号分解字符串,但我想忽略用双引号括起来的字符串。我读过那个
例如,下面的字符串。
Fruit,10,"Bananas, Oranges, Grapes"
我想得到以下
Fruit
10
"Bananas, Oranges, Grapes"
目前我收到以下输出
Fruit
10
"Bananas
Oranges
Grapes"
enter code here
在提出以下建议和答案之后,以下是我最终得到的一个示例。 (显然对我很有用)
Imports Microsoft.VisualBasic.FileIO
Dim fileReader As New TextFieldParser(fileName)
fileReader.TextFieldType = FieldType.Delimited
fileReader.SetDelimiters(",")
fileReader.HasFieldsEnclosedInQuotes = True
While fileReader.EndOfData = False
Dim columnData() As String = fileReader.ReadFields
' Processing of field data
End While
答案 0 :(得分:9)
你最好使用解析器,就像评论中提到的那样。也就是说,可以通过以下方式使用正则表达式来实现它:
,(?=(?:[^"]*"[^"]*")*[^"]*$)
正向前瞻((?= ... )
)确保在逗号之前存在偶数引号(即,它们成对出现,或者没有)。
[^"]*
匹配非引号字符。
答案 1 :(得分:3)
我发现下面是最简单的方法,我们可以做到
string fruits = "Fruit,10,"Bananas, Oranges, Grapes"";
string[] fruitsArr = Regex.Split(fruits, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
<强>输出:强>
fruitsArr[0] = "Fruit"
fruitsArr[1] = "10"
fruitsArr[2] = "\"Bananas, Oranges, Grapes\""
如果您需要纯字符串数据,那么您可以这样做,
fruitsArr[2].Replace("\"", "")
答案 2 :(得分:1)
快速解决方法可以预先解析引号内的逗号并将其替换为另一个分隔符,拆分值并使用分隔符对值进行后解析,并将其替换为原始逗号。
答案 3 :(得分:0)
如果使用c#,则可以使用
string searchQuery = "Fruit,10,\"Bananas, Oranges, Grapes\"";
List<string> list1 = Regex.Matches(searchQuery, @"(?<match>\w+)|\""(?<match>[\w\s,]*)""").Cast<Match>().Select(m => m.Groups["match"].Value).ToList();
foreach(var v in list1)
Console.WriteLine(v);
输出:
水果
10
香蕉,橘子,葡萄