【问题标题】:regex to parse csv正则表达式解析 csv
【发布时间】:2016-10-10 00:29:54
【问题描述】:

我正在寻找一个从 csv 文件中一次解析一行的正则表达式。基本上,string.readline() 做了什么,但如果它们在双引号内,它将允许换行。

或者有更简单的方法吗?

【问题讨论】:

  • 我不明白为什么人们会沉迷于 Stack Overflow 上的正则表达式。我了解它们的实用性,但我不明白为什么您不能只使用 CSV 解析器。
  • 有很多第三方 CSV 解析库,但没有一个使用正则表达式。只是因为那不是适合它的正确工具
  • 我完全理解,因为它提供了简单修复的诱惑。如果您不太了解正则表达式,有时似乎任何文本处理问题都可以在一行正则表达式中解决。相比之下,查找、连接和测试解析器似乎令人生畏。

标签: asp.net regex csv


【解决方案1】:

使用正则表达式解析 CSV 对于控制良好的 CSV 数据中的简单应用程序来说很好,但通常会有很多 陷阱,例如 转义以在引用的字符串中嵌入引号和逗号 等。这通常会使正则表达式在此任务中变得棘手且有风险。

我建议您使用经过良好测试的 CSV 模块。

--编辑:-- 见这篇优秀的文章,Stop Rolling Your Own CSV Parser!

【讨论】:

    【解决方案2】:

    FileHelpers 库非常适合此用途。

    http://www.filehelpers.net/

    【讨论】:

      【解决方案3】:

      使用 .NET 框架的内置功能,而不是依赖容易出错的正则表达式、过度简化的“拆分”逻辑或第 3 方组件:

      Using Reader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\MyFile.csv")
      
          Reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
      
          Dim MyDelimeters(0 To 0) As String
          Reader.HasFieldsEnclosedInQuotes = False
          Reader.SetDelimiters(","c)
      
          Dim currentRow As String()
          While Not Reader.EndOfData
              Try
                  currentRow = Reader.ReadFields()
                  Dim currentField As String
                  For Each currentField In currentRow
                      MsgBox(currentField)
                  Next
              Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
                  MsgBox("Line " & ex.Message &
                  "is not valid and will be skipped.")
              End Try
          End While
      End Using
      

      【讨论】:

        猜你喜欢
        • 2012-05-18
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 2012-10-17
        • 1970-01-01
        相关资源
        最近更新 更多