我需要从Url.PathAndQuery中删除任何"&id = SomeValue".SomeValue可以是int或字符串.并且可能会或可能不会跟随另一个&符号.
所以它可能是
somepage.aspx?cat=22&id=SomeId¶m2=4
Run Code Online (Sandbox Code Playgroud)
要么
somepage.aspx?cat=tect&id=450
Run Code Online (Sandbox Code Playgroud)
我想留下来
somepage.aspx?cat=22¶m2=4
Run Code Online (Sandbox Code Playgroud)
要么
somepage.aspx?cat=tect
Run Code Online (Sandbox Code Playgroud)
刚走出我的头顶......
string url = "somepage.aspx?cat=22&id=SomeId¶m2=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¶m2=4";
url = regex.Replace(url, "$1");
Assert.AreEqual("somepage.aspx?cat=22¶m2=4",url);
}
[TestMethod]
public void RegexReplacesParameterInFront()
{
string url = "somepage.aspx?id=SomeId&cat=22¶m2=4";
url = regex.Replace(url, "$1");
Assert.AreEqual("somepage.aspx?cat=22¶m2=4", url);
}
[TestMethod]
public void RegexReplacesParameterAtEnd()
{
string url = "somepage.aspx?cat=22¶m2=4&id=SomeId";
url = regex.Replace(url, "$1");
Assert.AreEqual("somepage.aspx?cat=22¶m2=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)
然后用反向引用替换该表达式,这样就不会丢失初始值?/&.
注意 - 从测试中可以看出,这会发出尾随?或者,当被替换的参数分别是唯一的或最后一个时.您可以使用字符串方法来摆脱这种情况,但如果有人知道如何仅使用正则表达式将它们排除在结果之外,那么这将是非常好的.
| 归档时间: |
|
| 查看次数: |
4853 次 |
| 最近记录: |