我正在尋找一個正則表達式,它將一次解析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