• 締切済み

CSVのRegexでの分割

期待する結果が得られる正規表現を教えて下さい。 環境はVS2008,FW3.5です。 Module Module1 Sub Main() Dim sBuf As String = """abc,xyz"",""123,456"",777,333" Dim sPtm As String sPtm = "\s*(""(?:[^""]|"""")*""|[^,]*)\s*," Dim oRegex As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(sPtm) Dim sLineData As String() = oRegex.Split(sBuf) For iLoop As Integer = 0 To sLineData.Length - 1 System.Console.WriteLine("{0} : {1}", iLoop, sLineData(iLoop)) Next End Sub End Module 実行結果 0 : 1 : "abc,xyz" 2 : 3 : "123,456" 4 : 5 : 777 6 : 333 期待する結果 0 : "abc,xyz" 1 : "123,456" 2 : 777 3 : 333

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.3

C#ですが、次は参考にならないでしょうか。 http://www.oborodukiyo.info/RE/VS2010/RE-PickoutCSVData.aspx

回答No.2

C#ですが偶然よく似た質問を見かけたのでリンクしておきます。

参考URL:
http://bbs.wankuma.com/index.cgi?mode=al2&namber=24061
回答No.1

Class Q4284614 Shared Sub Main() Dim sBuf As String = """abc,xyz"",""123,456"",777,333" Dim sPtm As String sPtm = "\s*(""(?:[^""]|"""")*""|[^,])+\s*(?=(,|$))" Dim oRegex As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(sPtm) Dim sLineData As System.Text.RegularExpressions.MatchCollection = oRegex.Matches(sBuf) For iLoop As Integer = 0 To sLineData.Count - 1 System.Console.WriteLine("{0} : {1}", iLoop, sLineData(iLoop)) Next End Sub End Class 'ポイント1:Splitだからダメなんでは?Machesでないと。 'ポイント2:最後の文字列の後ろにはカンマが付かないので考慮する必要がある。 'ポイント3:空文字列がヒットしてしまうので+がないといけない。 'ポイント4:項目中に改行があってもちゃんとヒットするかは検証していない