- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- oboroxx
- ベストアンサー率40% (317/792)
C#ですが、次は参考にならないでしょうか。 http://www.oborodukiyo.info/RE/VS2010/RE-PickoutCSVData.aspx
- ProKaseifu
- ベストアンサー率51% (98/192)
C#ですが偶然よく似た質問を見かけたのでリンクしておきます。
- himajin100000
- ベストアンサー率54% (1660/3060)
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:項目中に改行があってもちゃんとヒットするかは検証していない