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));
}

所以我最终会得到“用户名:测试”、“密码:通过”等等。

(目前我只有 1 场比赛。)

编辑:代码正在运行,人们可以使用它作为参考。

4

2 回答 2

2

您正在Substring从而data不是提取m.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 回答