从Querystring
添加匹配项到字典 myQuery = "RecordFiles/findrecords/$filter=userid eq 8w4W4E and recordid eq 1catf2deb-4wdx-450c-97cd-6rre331d4a6ec";
字符串myRegexQueryPattern = @"^(RecordFiles/findrecords/\$filter=userid eq)\s(?<userid>\S+)((\s(and recordid eq)\s(?<recordid>\w+))|())";
Dictionary<string, string> dataDictionary;
Regex myregx = new Regex(myRegexQueryPattern, RegexOptions.IgnoreCase);
bool status= AddToDictionary(myQuery, myregx, out dataDictionary);
但是,当我运行此代码时,我只获得了recordid的第一部分,并且正在滑动剩余。
实际结果
的recordId = 1catf2deb
预期结果 这里我的词典应该包含
recordid = 1catf2deb-4wdx-450c-97cd-6rre331d4a6ec
有人可以帮助我获得预期的结果吗?我的代码的哪一部分是错误的,我如何纠正我的代码以获得预期的结果
public static bool AddToDictionary(string query, Regex regex, out Dictionary<string, string> data)
{
Match match = regex.Match(query);
bool status = false;
string[] groupNames = regex.GetGroupNames();
data = new Dictionary<string, string>();
if (match.Success)
{
foreach (var groupName in groupNames)
{
data.Add(groupName, match.Groups[groupName].Value);
}
status = true;
}
return status;
}
答案 0 :(得分:0)
在正则表达式的这一部分
(?<recordid>\w+)
您使用匹配所有单词字符的“\ w”,字符“ - ”不是其中的一部分。
如果您将其编辑为
(?<recordid>\S+)
or even
(?<recordid>[\w-]+) if you can only allow \w or -
我相信,你将能够捕捉到你想要的价值。
将来,对于Regexp测试,我建议使用RegExr。它可用于桌面以及作为在线应用程序,可以直观地告诉您RegEx何时通过/不通过。