C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 45 を表示中)
■24094 / )  Re[5]: 「,」によるSplit
□投稿者/ meguron (3回)-(2008/08/27(Wed) 17:40:02)
No24092 (Ognac さん) に返信
正規表現に詳しくないのですが、

> Single/Double Quateがない素の文字列の時は <q1>が未確定なので、(q1)\kは無視されるので、分離可能です。
> "\s*(?<q1>[""']?)(?<fact>.*?)(?(q1)\k<q1>)\s*(?=(,|$))"

"\s*("(?:[^"]|"")*"|[^,]*)\s*,"の方がまだ良い結果を出してくれます。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1 {
    class Program {
        static void Main( string[] args ) {
            string sBuf = "\"abc,xyz\",\"123,456\",777,333";
            string sPtm = string.Empty;
            sPtm = "\\s*(\"(?:[^\"]|\"\")*\"|[^,]*)\\s*,";
//            sPtm = "\\s*(?<q1>[\"\"']?)(?<fact>.*?)(?(q1)\\k<q1>)\\s*(?=(,|$))";
            Regex oRegex = new Regex(sPtm);
            string[] sLineData = oRegex.Split(sBuf);
            for ( int iLoop =0 ; iLoop < sLineData.Length ; iLoop++ ) {
                Console.WriteLine("{0} : {1}" , iLoop , sLineData[iLoop]);
            }
        }
    }

    /*
     実行結果
    0 :
    1 : "abc,xyz"
    2 :
    3 : "123,456"
    4 :
    5 : 777
    6 : 333

     * 期待する結果
    0 : "abc,xyz"
    1 : "123,456"
    2 : 777
    3 : 333
     */
}

返信 編集キー/


管理者用

- Child Tree -