如何删除Regex中的特定url参数
本文关键字:url 参数 Regex 何删除 删除 | 更新日期: 2023-09-27 18:28:34
我有这个url模式
http://dev.virtualearth.net/REST/v1/Locations?
addressLine={0}&
adminDistrict={1}&
locality={2}&
countryRegion={3}&
postalCode={4}&
userLocation={5}&
inclnb=1&
key={6}
假设locality
和userLocation
没有值
http://dev.virtualearth.net/REST/v1/Locations?
addressLine=Main&
adminDistrict=WA&
locality=&
countryRegion=US&
postalCode=98001&
userLocation=&
inclnb=1&
key=BingKey
然后我想删除所有等于"&
"的参数
例如:"locality=&
"answers"userLocation=&
"
应该是这样的:
http://dev.virtualearth.net/REST/v1/Locations?
addressLine=Main&
adminDistrict=WA&
countryRegion=US&
postalCode=98001&
inclnb=1&
key=BingKey
最终输出:
http://dev.virtualearth.net/REST/v1/Locations?addressLine=Main&adminDistrict=WA&countryRegion=US&postalCode=98001&inclnb=1&key=BingKey
为什么您特别想要使用正则表达式?C#中有一些特定于构建和处理URI的类。我建议您查看HttpUtility.PasseQueryString()或Uri.TryCreate.
然后,您将解析查询字符串,循环遍历只有一个键而没有值的变量,并在没有它们的情况下重建一个新的uri。它将比正则表达式更容易阅读和维护。
编辑:我很快决定看看如何做到这一点:
string originalUri = "http://www.example.org/etc?query=string&query2=&query3=";
// Create the URI builder object which will give us access to the query string.
var uri = new UriBuilder(originalUri);
// Parse the querystring into parts
var query = System.Web.HttpUtility.ParseQueryString(uri.Query);
// Loop through the parts to select only the ones where the value is not null or empty
var resultQuery = query.AllKeys
.Where(k => !string.IsNullOrEmpty(query[k]))
.Select(k => string.Format("{0}={1}", k, query[k]));
// Set the querystring part to the parsed version with blank values removed
uri.Query = string.Join("&",resultQuery);
// Done, uri now contains "http://www.example.org/etc?query=string"
@"[''w]+=''''amp;"应该会得到你想要的东西,但如果相应的值为空,那么简单地不将参数添加到url字符串中不是更容易吗?