2013-04-17 143 views
0

字典添加配套项目从查询字符串字典添加匹配字符串的项目从查询字符串

更改为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

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

(?<recordid>\w+) 

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

如果要修改它是

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

您将能够捕捉到你想要的值,我相信。

未来,对于Regexp测试,我会推荐使用RegExr。它可用于桌面以及作为一个在线应用程序,它可以直观地告诉您RegEx何时通过。