• ベストアンサー

C#カンマで区切る

文字列3種類 a,bc a,"b,c" "a,b",c 単純にカンマでsplitしてもだめですし、ダブルクォーテーションも文字列にカンマがある時だけついて来ます。 カンマで二つの文字列に区切るにはどうすれば良いでしょうか。お願いします。なおCSVファイルではなく、ただの文字列です。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

正規表現使っている割にはスマートに書けませんでしたが・・・・・・・・・ using System.Text.RegularExpressions; //最初に追加 string[] st = new string[] { "a,bc", @"a,""b,c""", @"""a,b"",c" }; Regex re = new Regex(@",*""[^,]+,[^,]+"",*"); foreach(string s in st) { if(re.IsMatch(s)) { Console.WriteLine(string.Format("{0} {1} {2}",s,re.Replace(s,""),(re.Match(s).Value).Replace(",",""))); }else{ Console.WriteLine(string.Format("{0} {1} {2}",s,s.Split(',')[0],s.Split(',')[1])); } } こんな感じの事でしょうか?

noname#189001
質問者

お礼

みようみまねでできました。ありがとうございます。 private void button3_Click(object sender, EventArgs e) { string[] st = new string[] { "",",","ad", "a,bc", @"a,""b,c""", @"""a,b"",c", @"""a,b"",""c,d""" }; Regex regex = new Regex("(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)"); foreach (string s in st) { foreach (Match m in regex.Matches(s)) { string col = m.Value.TrimEnd('"').TrimStart('"'); MessageBox.Show(col); } } }

noname#189001
質問者

補足

ありがとうございます。正規表現、そういうことです。 ところで、このコードで"a,b","c,d"は分解できないようですが・・・ お願いします。

その他の回答 (1)

回答No.1

自分で1文字ずつ見て解析する処理を書くしかない。と思ったら こんなページが有った。 CSVファイルを読み込むには?[2.0のみ、C#、VB] http://www.atmarkit.co.jp/fdotnet/dotnettips/487csvparser/csvparser.html

noname#189001
質問者

補足

すいません、CSVファイルではないんです。

関連するQ&A