【问题标题】:Split CSV String拆分 CSV 字符串
【发布时间】:2010-10-31 20:39:53
【问题描述】:

我将如何拆分以下字符串?

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'

谢谢

【问题讨论】:

    标签: .net vb.net string csv split


    【解决方案1】:

    当您有方便的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 看看事情会变得多么混乱)
    • 使用图书馆,更快乐

    【讨论】:

    • 我不同意必须使用 CSV 库的必要性。如果您知道 CSV 文件格式正确,那么使用 ReadLine 和 Split 的简单方法就可以很好地完成这项工作。
    • 但是,在这种情况下确实是可取的,因为字段中有逗号分隔的数字。
    • 所以,换句话说,你说你完全同意我的观点:)
    • 伟大的结对编程人员 :)
    • 您假设 OP 正在解析文件的 CSV 文件。依赖 CSV 解析库来拆分字符串肯定是矫枉过正(这是被要求的)。
    【解决方案2】:
    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】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-08
          • 1970-01-01
          • 2011-04-25
          • 2018-01-25
          • 1970-01-01
          • 2017-11-21
          • 1970-01-01
          相关资源
          最近更新 更多