1

画像ファイル名の名前と値のペアを表す文字列を使用しています。

string pairs = image_attribs(color,purple;size,large).jpg;

その文字列を解析して、セミコロンの前後から名前と値のペアを取得する必要があります。セミコロンで分割し、左括弧までの長さを差し引くことができますが、対応する関数を複数のペアに拡張できるようにしたいと考えています。

これらのペアを返すことができる複数の部分文字列関数を考え出す必要があります。次に、それらを KeyValuePairs のリストにします。

List<KeyValuePair<string, string>> attributes = new List<KeyValuePair<string, string>>();

最初のペアのみを取得する現在の解析:

string attribs = imagepath.Substring(imagepath.IndexOf("(") +1, imagepath.IndexOf(";" - imagepath.IndexOf("(");

コンマ区切りのペアを解析して、新しい KeyValuePairs を作成および追加する機能は既にあります。

4

4 に答える 4

1
var repspl = mydata.Split(';').Select( x =>  new { Key = x.Split(',')[0], Value = x.Split(',')[1] });
于 2014-05-23T16:14:33.823 に答える
0

正規表現と .net 正規表現エンジンのキャプチャ機能のクールな使用法を組み合わせて使用​​できます。

string pairs = "image_attribs(color,purple;size,large;attr,val).jpg";

//This would capture each key in a <attr> named group and each 
//value in a <val> named group
var groups = Regex.Match(
    pairs, 
    @"\((?:(?<attr>[^),]+?),(?<val>[^);]+?)(?:;|\)))*");

//Because each group's capture is stored in .net you can access them and zip them into one list.
var yourList = 
    Enumerable.Zip
    (
        groups.Groups["attr"].Captures.Cast<Capture>().Select(c => c.Value), 
        groups.Groups["val"].Captures.Cast<Capture>().Select(c => c.Value), 
        (attr, val) => new KeyValuePair<string, string>(attr, val)
    ).ToList();
于 2014-05-23T16:22:05.730 に答える