【100分】c#如何用正则去掉URL里面的参数? 我现在的网页地址里有多个参数,比如address.aspx?Y=2000&T=8888&F=xan&P=tuye,我现在想去掉其中的某个参数比如说F=xan,去掉后是:address.aspx?Y=2000&T=8888&P=tuye,但是这个参数有可能在地址中的任意位置,可能是第一个也可能是最后一个,而且地址里的参数个数也不确定。现在比较痛苦的是“&”总在捣乱,有的时候有,有的时候没有,谢谢大家!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void Main(){string url=@"address.aspx?Y=2000&T=8888&F=xan&P=tuye"; url=Regex.Replace(url,@"T=[^&]*&?",string.Empty); Console.WriteLine(url); }/*address.aspx?Y=2000&F=xan&P=tuye*/ string url = "www.xxx.com?a=1&b=2&c=1";string[] s = url.Split('?');if(s.Length == 2 && s[1].Length > 0){ s[1] = "&" + s[1] + "&"; s[1] = s[1].Replace("&a=1&", ""); s[1] = s[1].Trim('&'); if(s[1].Length > 0) { url = s[0] + "?" + s[1]; }} 有可能出现的情况address.aspx?Y=2000&T=8888&F=xan&P=tuyeaddress.aspx?F=xan&Y=2000&T=8888&P=tuyeaddress.aspx?Y=2000&T=8888&P=tuye&F=xanaddress.aspx?F=xanaddress.aspx?Y=2000&T=8888&P=tuye------------------------------------------address.aspx?Y=2000&T=8888&F=xan&P=tuye=>?Y=2000&T=8888&F=xan&P=tuyeIndexOf &F= -> == -1 ? IndexOf ?F= | (IndexOf &F=) IndexOf & -> == -1 ? Substring(IndexOf &F=,(IndexOf &F=) IndexOf & ) &?T=[^&]*&?楼上没考参数在最后的情况 a=1-------a= 可以确定,a=后面的不能确定 谢谢大家,我用了Regex.Replace(path, @"F=[^&]*&?", string.Empty);但是发现如果是最后一个参数的情况下,替换完了最后有一个“&”没有删掉, void Main(){string url=@"address.aspx?Y=2000&T=8888"; url=Regex.Replace(url,@"T=[^&]*&?",string.Empty); Console.WriteLine(url.TrimEnd('&')); } 按正常逻辑,T=""跟T不存在,对于URL参数判断不影响,所以用将Url中key的值替换为空,也能实现效果. /// 将Url中key的值替换为value,如果不存在key则追加 public static string RegularUrl(string key, string value, string url) { url += HttpContext.Current.Request.Url.Query; int fragPos = url.LastIndexOf("#"); string fragment = ""; if (fragPos > -1) { fragment = url.Substring(fragPos); url = url.Substring(0, fragPos); } int querystart = url.IndexOf("?"); if (querystart < 0) { url += "?" + key + "=" + value; } else if (querystart == url.Length - 1) { url += key + "=" + value; } else { Regex Re = new Regex(key + "=[^\\s&#]*", RegexOptions.IgnoreCase); url = (Re.IsMatch(url)) ? Re.Replace(url, key + "=" + value) : url + "&" + key + "=" + value; } return url + fragment; }RegularUrl("Y", "", "address.aspx?Y=2000&T=8888") 你直接判断request.querystring["param1"]!=null这样判断参数是否存在然后根据传过来的值进行相应操作 try...string[] urls = new string[] { "address.aspx?Y=2000&T=8888&F=xan&P=tuye", "address.aspx?F=xan&Y=2000&T=8888&P=tuye", "address.aspx?Y=2000&T=8888&P=tuye&F=xan", "address.aspx?F=xan", "address.aspx?Y=2000&T=8888&P=tuye", "address.aspx?Y=2000&T=8888" };Regex reg = new Regex(@"(?(&T=[^&]*$)&T=[^&]*$|T=[^&]*&)");foreach (string s in urls){ richTextBox2.Text += "源字符串:" + s.PadRight(50) + "替换结果:" + reg.Replace(s, "") + "\n";}/*-------输出------源字符串:address.aspx?Y=2000&T=8888&F=xan&P=tuye 替换结果:address.aspx?Y=2000&F=xan&P=tuye源字符串:address.aspx?F=xan&Y=2000&T=8888&P=tuye 替换结果:address.aspx?F=xan&Y=2000&P=tuye源字符串:address.aspx?Y=2000&T=8888&P=tuye&F=xan 替换结果:address.aspx?Y=2000&P=tuye&F=xan源字符串:address.aspx?F=xan 替换结果:address.aspx?F=xan源字符串:address.aspx?Y=2000&T=8888&P=tuye 替换结果:address.aspx?Y=2000&P=tuye源字符串:address.aspx?Y=2000&T=8888 替换结果:address.aspx?Y=2000*/ asp.net自定义控件怎么弄成DLL方式 我想用FileUpload同时传两个不同类型的文件,怎么做? Lucene 分词 dict词典问题... 导出pdf格式 ConnectionString 属性尚未初始化 请问用asp.net怎样实现类似校内网上学校选择的效果? 重新安装.NET2008之后CS文件无法与aspx文件链接 请问如何建立一个基于的ASP的简单聊天室 如何在web页面实现播放服务器上的视频的功能? 安装vs后的遇到一个麻烦--关于智能优化的,请帮忙解决一下 showModalDialog窗口中引用IFRAME怎么刷新? textbox只能输入整数
void Main()
{
string url=@"address.aspx?Y=2000&T=8888&F=xan&P=tuye";
url=Regex.Replace(url,@"T=[^&]*&?",string.Empty);
Console.WriteLine(url);
}/*
address.aspx?Y=2000&F=xan&P=tuye
*/
string[] s = url.Split('?');
if(s.Length == 2 && s[1].Length > 0)
{
s[1] = "&" + s[1] + "&";
s[1] = s[1].Replace("&a=1&", "");
s[1] = s[1].Trim('&');
if(s[1].Length > 0)
{
url = s[0] + "?" + s[1];
}
}
address.aspx?F=xan&Y=2000&T=8888&P=tuye
address.aspx?Y=2000&T=8888&P=tuye&F=xan
address.aspx?F=xan
address.aspx?Y=2000&T=8888&P=tuye
------------------------------------------address.aspx?Y=2000&T=8888&F=xan&P=tuye=>?Y=2000&T=8888&F=xan&P=tuyeIndexOf &F= -> == -1 ? IndexOf ?F=
|
(IndexOf &F=) IndexOf & -> == -1 ? Substring(IndexOf &F=,(IndexOf &F=) IndexOf & )
楼上没考参数在最后的情况
-------
a= 可以确定,a=后面的不能确定
void Main()
{
string url=@"address.aspx?Y=2000&T=8888";
url=Regex.Replace(url,@"T=[^&]*&?",string.Empty); Console.WriteLine(url.TrimEnd('&'));
}
将Url中key的值替换为空,也能实现效果. /// 将Url中key的值替换为value,如果不存在key则追加
public static string RegularUrl(string key, string value, string url)
{
url += HttpContext.Current.Request.Url.Query;
int fragPos = url.LastIndexOf("#");
string fragment = "";
if (fragPos > -1)
{
fragment = url.Substring(fragPos);
url = url.Substring(0, fragPos);
}
int querystart = url.IndexOf("?");
if (querystart < 0)
{
url += "?" + key + "=" + value;
}
else if (querystart == url.Length - 1)
{
url += key + "=" + value;
}
else
{
Regex Re = new Regex(key + "=[^\\s&#]*", RegexOptions.IgnoreCase);
url = (Re.IsMatch(url)) ? Re.Replace(url, key + "=" + value) : url + "&" + key + "=" + value;
}
return url + fragment;
}RegularUrl("Y", "", "address.aspx?Y=2000&T=8888")
这样判断参数是否存在
然后根据传过来的值进行相应操作
Regex reg = new Regex(@"(?(&T=[^&]*$)&T=[^&]*$|T=[^&]*&)");
foreach (string s in urls)
{
richTextBox2.Text += "源字符串:" + s.PadRight(50) + "替换结果:" + reg.Replace(s, "") + "\n";
}
/*-------输出------
源字符串:address.aspx?Y=2000&T=8888&F=xan&P=tuye 替换结果:address.aspx?Y=2000&F=xan&P=tuye
源字符串:address.aspx?F=xan&Y=2000&T=8888&P=tuye 替换结果:address.aspx?F=xan&Y=2000&P=tuye
源字符串:address.aspx?Y=2000&T=8888&P=tuye&F=xan 替换结果:address.aspx?Y=2000&P=tuye&F=xan
源字符串:address.aspx?F=xan 替换结果:address.aspx?F=xan
源字符串:address.aspx?Y=2000&T=8888&P=tuye 替换结果:address.aspx?Y=2000&P=tuye
源字符串:address.aspx?Y=2000&T=8888 替换结果:address.aspx?Y=2000
*/