0

从 Querystring 将匹配项添加到字典

我的查询 ="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 的第一部分并且正在跳过剩余的部分。

实际结果

记录ID=1catf2deb

预期结果 这里我的字典应该包含

记录ID = 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;
        }
4

1 回答 1

0

在你的正则表达式的这一部分

(?<recordid>\w+)

您使用匹配所有单词字符的“\w”,字符“-”不是其中的一部分。

如果您将其编辑为

(?<recordid>\S+)
or even
(?<recordid>[\w-]+) if you can only allow \w or -

我相信,您将能够获得您想要的价值。

将来,对于 Regexp 测试,我建议使用RegExr。它可用于桌面,也可作为在线应用程序,直观地告诉您 RegEx 何时通过/未通过。

于 2013-04-17T03:41:05.243 回答