将CSV字符串拆分

3

我该如何分割以下字符串?

test, 7535, '1,830,000', '5,000,000'

结果应该是:
test
7535
'1,830,000'
'5,000,000'

我会尽力:
Dim S() as string = mystring.split(",")

但是我得到的是,

test
7535
'1
830
000'
'5
000
000'

谢谢

4个回答

8

当你有方便的高质量库可用时,不要手动解析CSV。拜托了!

CSV解析有许多潜在的陷阱,而这个库根据我的测试,巧妙地解决了其中大部分问题。

话虽如此,如果这是一个一次性的任务,并且字符串始终像你的示例一样,你可以使用正则表达式,例如(VB.NET语法可能不正确,请修复):

        Dim s as string = "1, 2, '1,233,333', '8,444,555'";
        Dim r as Regex = new Regex(",\s");
        Dim re() as string = r.Split(s);

这取决于分隔逗号后始终有空格,并且数字之间的逗号没有空格。 如果不是始终如此,您可以:
  • 使正则表达式更复杂(单击此处以查看可能变得混乱的内容)
  • 使用库并感到更加愉快

1
我不同意必须使用CSV库的观点。如果你知道CSV文件格式正确,那么使用ReadLine和Split方法完全可以胜任这个工作。 - Noldorin
然而,在这种情况下,鉴于字段中有逗号分隔的数字,确实建议这样做。 - Noldorin
2
所以,换句话说,你是在说你完全同意我 :) - Vinko Vrsalovic
@Mark:我同意,这也是我在第三段中所说的“一次性任务”的意思之一。因为我认为他很可能实际上正在解析一个CSV文件而不仅仅是一个字符串,所以我加了警告。此外,这个库非常小巧高效,所以这并不是一个大问题。 - Vinko Vrsalovic
这太疯狂了。为什么不使用内置的TextParser类 - Adam Zuckerman
显示剩余2条评论

2

如果仅仅是这个例子,不需要使用正则表达式,Split-函数(Microsoft.VisualBasic.Strings的成员)可以将字符串作为分隔符,所以只需输入", "即可捕获那些后面带有空格的逗号:

    Dim s As String = "1, 2, '1,233,333', '8,444,555'"
    Dim r() As String = Split(s, ", ")

1
Dim words as New List(Of String)()
Dim inQuotes as Boolean
Dim thisWord as String
For Each c as Char in String
    If c = "'"c Then inQuotes = Not inQuotes
    If c = ","c AndAlso Not inQuotes Then
        words.Add(thisWord)
        thisWord = Nothing
    Else
        thisWord &= c
    End If
Next

0
尝试使用以下正则表达式:"('([^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接