拆分CSV字符串

时间:2009-06-06 10:52:05

标签: .net vb.net string csv split

我如何分割以下字符串?

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 个答案:

答案 0 :(得分:8)

如果您有方便的good quality libraries available,请不要手动解析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);

这表示在分隔逗号后总是有一个空格,并且数字之间的逗号中没有空格。如果情况并非总是这样,你可以:

  • 让正则表达式更复杂(看here看看有多混乱)
  • 使用图书馆并且更开心

答案 1 :(得分:2)

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

尝试使用此RegExp:"('([^']|'')*'|[^',\r\n]*)(,|\r\n?|\n)?"