0

我有一个字符串,它是一个 REST 查询字符串,它看起来像这样

//new_requestSet?$select=new_ExternalStatus,new_name&$filter=new_ExternalStatusDirty eq true

我正在使用StackOverFlow 上发布的正则表达式类。在上面的输入字符串中找到一些位置效果很好,但我觉得提取我需要的实际值的代码效率低下。有没有更有效的方法使用正则表达式而不是 IndexOf 和 SubString?

int fieldPos = StringExtender.NthIndexOf(json, "filter=", 1);
            int firstSpace = StringExtender.NthIndexOf(json, " ", 1);
            int secondSpace = StringExtender.NthIndexOf(json, " ", 2);
            int entityPosEnd = StringExtender.NthIndexOf(json, @"\Set", 1);
            int searchFieldStart = StringExtender.NthIndexOf(json, "=", 2);
            string searchField = json.Substring(searchFieldStart + 1, firstSpace - searchFieldStart - 1);
            string criteria = json.Substring(secondSpace+1);
            string entity = json.Substring(0, entityPosEnd);
4

2 回答 2

0

捕获组应该会有所帮助。http://msdn.microsoft.com/en-us/library/az24scfc.aspx#grouping_constructs

    var regex = new Regex(@"(?<name>[^=?&]+)=(?<value>[^&]+)");
    var results = regex.Matches(request);

    foreach (Match result in results)
    {
        Console.WriteLine("name: {0} - value: {1}", result.Groups["name"].Value, result.Groups["value"].Value);
    }
于 2012-09-14T23:56:20.567 回答
0

您可以第一次通过“&”吐出字符串并接收参数名称/值对
然后通过“=”第二次拆分每对并接收参数名称/值的不同值。

您需要编写更多代码,但根本不需要正则表达式。

于 2012-09-15T00:31:41.573 回答