我一直在努力寻找一些关于如何实现目标的方法。
我得到了什么:
(?<={).*?(?=})
此类作品但不会递归检查匹配。
我需要实现的目标:
示例:
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'等等。
(目前我只得到一场比赛。)
编辑:代码正常工作,人们可以将其用作参考。
答案 0 :(得分: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]);
}
答案 1 :(得分:1)
尝试简单:
\{(?<data>.*?)\}
或者,将键和值分开:
\{(?<key>.*?):(?<value>.*?)\}
并像这样使用它:
foreach( Match m in matches )
{
var key = m.Groups["key"].Value;
var value = m.Groups["value"].Value;
}