C# 选择多个匹配项

C# 选择多个匹配项,c#,regex,C#,Regex,我一直在努力寻找如何实现我的目标 我得到的: (?<={).*?(?=}) 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.Substr

我一直在努力寻找如何实现我的目标

我得到的:

(?<={).*?(?=})
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));
}
我需要得到的是{and}中的所有文本

此代码正在中使用:

(?<={).*?(?=})
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));
}
Regex r=newregex(“(?请简单尝试:

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

您正在从
数据中提取
子字符串
,而不是
m.Value

改变

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

此外,您可以使用string的
Split
方法,而不是获取子字符串-

foreach (Match m in mc)
{
    string[] keyValue = m.Value.Split(':');
    dataCont.addData(keyValue[0], keyValue[1]);
}

虽然这不是问题,但这是个问题:)我并不是说这是答案,这是帮助我解决了另一个问题,我完全没有解决。原来的问题仍然存在。在这次编辑之后,虽然我得到了三个匹配的样本输入。我怀疑问题一定是在你的方法
addData
。你能用调试器的mc计数值检查一下吗?啊,是的,我不确定是什么我在过去几分钟内做了更改,但现在它肯定可以工作了。我猜它不是出于某种奇怪的原因编译的,也不是在运行上次编译的版本。嗯……在旁注中,你可以通过对匹配的字符串使用split来摆脱子字符串部分。在我的回答中更新了。我不确定你的示例将如何使用?并且混淆了吗g部分。我应该在那里输入值吗?如果是这样,那么这不是我要寻找的。键将不同,因为它们所在的方法用于许多不同的事情。键和值是正则表达式组的名称。使用此方法时,需要迭代正则表达式返回的捕获,如:var input=@”帐户{用户名:测试}{密码:通过}{电子邮件:demo@example.com}“var pattern=@“{(?.*?:(?.*?)\”;var regex=newregex(pattern);foreach(regex.Matches(input)中的匹配捕获){Console.Out.WriteLine(capture.Value);}输出为:{username:test}{password:pass}{email:demo@example.com}我写了一篇评论,因为这是一个好的正确答案。语法(?…)只是一种命名每个捕获组的方法,因此不必通过索引访问每个组,您可以通过名称访问它。此外,在正则表达式中分离数据看起来比手动拆分字符串更有趣!想法是不使用{}是的,但是如果有人想要的话,这可能就是答案。我试着投票认为它有用,但我需要15个代表。我写的正则表达式将提供没有{}的数据,如果这是你的意思的话。我对正则表达式不太了解,但是检查是否允许迭代匹配
dataCont.addData(
        m.Value.Substring(0, m.Value.IndexOf(':')), 
        m.Value.Substring(m.Value.IndexOf(':')+1));
foreach (Match m in mc)
{
    string[] keyValue = m.Value.Split(':');
    dataCont.addData(keyValue[0], keyValue[1]);
}