我正在寻找一个正则表达式,它将一次解析csv文件中的一行。基本上,string.readline()会做什么,但是如果它们在双引号内,它将允许换行。正则表达式解析csv
还是有更简单的方法来做到这一点?
我正在寻找一个正则表达式,它将一次解析csv文件中的一行。基本上,string.readline()会做什么,但是如果它们在双引号内,它将允许换行。正则表达式解析csv
还是有更简单的方法来做到这一点?
使用正则表达式解析CSV是罚款在良好控制的CSV数据简单的应用程序,但往往有这么多陷阱,如中引用的字符串转义的嵌入式引号和逗号等,这往往使正则表达式对这个任务来说是棘手和冒险的。
我推荐一个经过充分测试的CSV模块用于您的目的。
- 编辑 - 看到这个优秀的文章,Stop Rolling Your Own CSV Parser!
的FileHelpers库是用于此目的的相当不错。
而不是依靠易出错的正则表达式,在simpified“分裂”的逻辑或第三方组件,使用.NET框架的内置功能:
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
我不明白为什么人们对Stack Overflow的正则表达式痴迷。我理解他们的实用性,但我不明白为什么你不能只使用CSV解析器。 – avpx 2010-04-09 22:41:08
有这么多的第三方CSV解析库,并没有一个使用正则表达式。仅仅因为这不是它的正确工具*。 – BalusC 2010-04-09 22:46:18
我完全理解,因为它提供了一个简单修复的诱惑。如果你不太了解正则表达式,它有时看起来像任何文本处理问题可以在一个单一的正则表达式中解决。而查找,连接和测试解析器似乎可以通过比较来吓倒。 – tloflin 2010-04-09 22:47:17