1
"key1"="value1 http://www.example.com?a=1";"key2"="value2 http://www.example.com?a=2";

上記の行を2回分割する必要があります。最初は、コンマ文字です。2回目は=記号です。

値の部分にも=記号が含まれているため、正しく機能しません。

私のコードは、値の部分に=記号がなく、正規表現を使用していないと想定していたため、機能しません。String.Split('=')。

誰かが必要な正規表現を手伝ってもらえますか?私は物事を分離するのを助けるためにキー/値の両方の周りに二重引用符を追加しました。

4

7 に答える 7

3

私は正規表現を使用しませんでしたが、次のようなことができます。

        string test =@"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2""";

        string[] arr = test.Split(';');

        foreach (string s in arr)
        {
            int index = s.IndexOf('=');
            string key = s.Substring(0, index);

            string value = s.Substring(index+1, s.Length - index);
        }
于 2012-11-21T17:24:16.323 に答える
2

String.Split(char[], int)オーバーロード(http://msdn.microsoft.com/en-us/library/c1bs0eda.aspx)を使用します。2番目のパラメーターは、返すサブストリングの数を制限します。文字列に常に少なくとも1つの等号(キー/値のペア)があることがわかっている場合は、2番目のパラメーターを2に設定します。

string x = "key1=value1 http://www.example.com?a=1;key2=value2 http://www.example.com?a=2;";
char[] equal = new char[1] { '=' };
char[] semi = new char[1] { ';' };
string[] list = x.Split(semi, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in list)
{
    string[] kvp = s.Split(equal, 2);
    Console.WriteLine("Key: {0}, Value: {1}", kvp[0], kvp[1]);
}

- 結果:

Key: key1, Value: value1 http://www.example.com?a=1
Key: key2, Value: value2 http://www.example.com?a=2
于 2012-11-21T17:38:32.220 に答える
1

さて、あなたができることはIndexOf、最初のインデックスを取得するために使用できることです=

int i = myStr.IndexOf('=');

次に、を使用しString.Substringてキーと値を取得できます

string key = myStr.Substring(0, i)

string value = myStr.SubString(i+1);

ここにあなたが役に立つと思うかもしれない文字列クラスに関するいくつかのドキュメントがあります

于 2012-11-21T17:22:47.460 に答える
1

テキストを分割せずに一致させる必要があります

var keys= Regex.Matches(yourString,"""(.*?)""=.*?(http.*?)"";").Cast<Match>().Select(x=>
    new
    {
        key=x.Groups[1].Value,
        value=x.Groups[2].Value
    }
);

foreach(key in keys)
{
    key.key;//the key value
    key.value;//the value
}
于 2012-11-21T17:52:00.617 に答える
0

正規表現は次のようになります。

"(.+?)"="(.+?)"

悲しいことに、私にはわかりませんがC#、これはすべての言語で機能するはずです。結果を得るには、すべての試合で選択する必要があります。

group(1) as keys
group(2) as values
于 2012-11-21T17:24:48.507 に答える
0

区切り文字付きの文字列の配列で使用String.SplitしますStringSplitOptions.RemoveEmptyEntries

string s = "\"key1\"=\"value1 http://www.example.com?a=1\";\"key2\"=\"value2 http://www.example.com?a=2\"";

string[] result = s.Split(new string[] { "\";\"", "\"=\"", "\"" },
                           StringSplitOptions.RemoveEmptyEntries);

結果={文字列[4]}
    [0]: "key1"
    [1]: "value1 http://www.example.com?a=1"
    [2]:「key2」
    [3]: "value2 http://www.example.com?a=2"

次の区切り文字(二重引用符を含む)を使用します。

";"
"="
"

于 2012-11-21T17:37:04.930 に答える
0

ここで複数のトークンを使用してSplitメソッドを使用することもできます。これにより、トークンに基づいて分割された複数の値のstring[]が得られます。

空のエントリを削除したい場合は、次のようなコードを実行することもできます

string strValue = @"""key1""=""value1 http://www.example.com?a=1"";""key2""=""value2 http://www.example.com?a=2""";
string[] strSplit = strValue.Split(new string[] { "\";\"", "\"=\"", "\"" }, StringSplitOptions.RemoveEmptyEntries);

結果

strSplit    {string[4]} string[]
[0] "key1"  
[1] "value1 http://www.example.com?a=1"
[2] "key2"  
[3] "value2 http://www.example.com?a=2"
于 2012-11-21T17:42:57.880 に答える