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

标签 c# .net regex

我需要从 Url.PathAndQuery 中删除任何“&id=SomeValue”。其中 SomeValue 可以是 int 或字符串。它后面可能会也可能不会跟另一个和号。

可以这样

somepage.aspx?cat=22&id=SomeId&param2=4

somepage.aspx?cat=tect&id=450

我想留下来

somepage.aspx?cat=22&param2=4

somepage.aspx?cat=tect

最佳答案

<罢工>

<罢工>

刚刚离开我的头顶......

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);

<罢工>

更新时间 2010-03-05 11:12 PM PST

我对实际测试我的代码的评论感到羞愧。你是什​​么,我的质量检查部门?这是一个使用 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);
    }

解释的正则表达式说:

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 "&"

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

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

关于c# - 查询字符串值的 .NET 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390808/

相关文章:

C# 从本地目录获取 URL 路径

C#在线本地化

c# - .Net Socket 增强以支持 ACK 和聊天?

javascript - 替换 JavaScript 中的正则表达式匹配

c# - MVC 3 部分 View 上的 jQuery.load() 仅调用服务器一次(不是重新绑定(bind)问题)

c# - 在文本框中获取前 10 行和后 10 行 C#

c# - 为什么指定生命周期管理器时类型会注册两次?

c# - 为什么 Span<T> 扩展方法未使用 'in' 参数修饰符实现?

php - 使用 preg_replace_callback 查找和替换具有可变数量参数的函数签名

json - JQ - 替换完整 json 中的字符串