.NET查询字符串值的正则表达式

Pau*_*aul 2 .net c# regex

我需要从Url.PathAndQuery中删除任何"&id = SomeValue".SomeValue可以是int或字符串.并且可能会或可能不会跟随另一个&符号.

所以它可能是

somepage.aspx?cat=22&id=SomeId&param2=4
Run Code Online (Sandbox Code Playgroud)

要么

somepage.aspx?cat=tect&id=450
Run Code Online (Sandbox Code Playgroud)

我想留下来

somepage.aspx?cat=22&param2=4
Run Code Online (Sandbox Code Playgroud)

要么

somepage.aspx?cat=tect
Run Code Online (Sandbox Code Playgroud)

rou*_*tic 7

刚走出我的头顶......

string url = "somepage.aspx?cat=22&id=SomeId&param2=4";
Regex regex = new Regex("([\?\&])id=[^\?\&]+");
url = regex.replace(url, "\1");
System.Diagnostics.Debug.WriteLine("url = " + url);
Run Code Online (Sandbox Code Playgroud)

更新2010-03-05太平洋标准时间晚上11:12

我对实际测试代码的评论感到羞愧.你是什​​么,我的QA部门?这是使用MSTest的工作示例.

    Regex regex = new Regex(@"([\?\&])id=[^\&]+[\&]?");

    [TestMethod]
    public void RegexReplacesParameterInMiddle()
    {
        string url = "somepage.aspx?cat=22&id=SomeId&param2=4";
        url = regex.Replace(url, "$1");
        Assert.AreEqual("somepage.aspx?cat=22&param2=4",url);
    }

    [TestMethod]
    public void RegexReplacesParameterInFront()
    {
        string url = "somepage.aspx?id=SomeId&cat=22&param2=4";
        url = regex.Replace(url, "$1");
        Assert.AreEqual("somepage.aspx?cat=22&param2=4", url);
    }

    [TestMethod]
    public void RegexReplacesParameterAtEnd()
    {
        string url = "somepage.aspx?cat=22&param2=4&id=SomeId";
        url = regex.Replace(url, "$1");
        Assert.AreEqual("somepage.aspx?cat=22&param2=4&", url);
    }

    [TestMethod]
    public void RegexReplacesSoleParameter()
    {
        string url = "somepage.aspx?id=SomeId";
        url = regex.Replace(url, "$1");
        Assert.AreEqual("somepage.aspx?", url);
    }

    public void RegexIgnoresMissingParameter()
    {
        string url = "somepage.aspx?foo=bar&blet=monkey";
        url = regex.Replace(url, "$1");
        Assert.AreEqual("somepage.aspx?foo=bar&blet=monkey", url);
    }
Run Code Online (Sandbox Code Playgroud)

解释的正则表达式说:

Look for a "?" or an "&" character (and store it as a backreference)
followed by "id="
followed by one or more non-"&" characters.
optionally followed by another "&"
Run Code Online (Sandbox Code Playgroud)

然后用反向引用替换该表达式,这样就不会丢失初始值?/&.

注意 - 从测试中可以看出,这会发出尾随?或者,当被替换的参数分别是唯一的或最后一个时.您可以使用字符串方法来摆脱这种情况,但如果有人知道如何仅使用正则表达式将它们排除在结果之外,那么这将是非常好的.