■24094 / inTopicNo.6) |
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
*/
}
|
|