1

私は自分の目標を達成する方法について、しばらくの間試行錯誤してきました。

私が持っているもの:

(?<={).*?(?=})

この種の機能は機能しますが、再帰的に一致をチェックしません。

私が達成する必要があるもの:

例:

ACCOUNT{username:test}{password:pass}{email:demo@example.com}

取得する必要があるのは、{ と } 内のすべてのテキストです。

このコードは以下で使用されています:

Regex r = new Regex("(?<={).*?(?=})");
MatchCollection mc = r.Matches(data);

foreach (Match m in mc)
{
    dataCont.addData(m.Value.Substring(0, m.Value.IndexOf(':')), 
                     m.Value.Substring(m.Value.IndexOf(':') + 1));
}

そのため、'username:test'、'password:pass' などになります。

(現時点では、私は1試合しか得ていません。)

編集:コードは機能しており、人々は参照用に使用できます。

4

2 に答える 2

2

の代わりにSubstringから抽出しています。datam.Value

変化する

dataCont.addData(
        m.Value.Substring(0, data.IndexOf(':')), 
        m.Value.Substring(data.IndexOf(':')+1));

dataCont.addData(
        m.Value.Substring(0, m.Value.IndexOf(':')), 
        m.Value.Substring(m.Value.IndexOf(':')+1));

さらに、部分文字列を取得する代わりに、文字列のSplitメソッドを使用できます-

foreach (Match m in mc)
{
    string[] keyValue = m.Value.Split(':');
    dataCont.addData(keyValue[0], keyValue[1]);
}
于 2013-10-20T10:16:45.100 に答える
1

簡単に試してください:

\{(?<data>.*?)\}

または、キーと値を分離するには:

\{(?<key>.*?):(?<value>.*?)\}

そして、次のように使用します。

foreach( Match m in matches )
{
    var key = m.Groups["key"].Value;
    var value = m.Groups["value"].Value;
}
于 2013-10-20T10:15:40.247 に答える