- ベストアンサー
C#カンマで区切る
文字列3種類 a,bc a,"b,c" "a,b",c 単純にカンマでsplitしてもだめですし、ダブルクォーテーションも文字列にカンマがある時だけついて来ます。 カンマで二つの文字列に区切るにはどうすれば良いでしょうか。お願いします。なおCSVファイルではなく、ただの文字列です。
- みんなの回答 (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])); } } こんな感じの事でしょうか?
その他の回答 (1)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
自分で1文字ずつ見て解析する処理を書くしかない。と思ったら こんなページが有った。 CSVファイルを読み込むには?[2.0のみ、C#、VB] http://www.atmarkit.co.jp/fdotnet/dotnettips/487csvparser/csvparser.html
補足
すいません、CSVファイルではないんです。
お礼
みようみまねでできました。ありがとうございます。 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); } } }
補足
ありがとうございます。正規表現、そういうことです。 ところで、このコードで"a,b","c,d"は分解できないようですが・・・ お願いします。