如何删除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}  

假设localityuserLocation没有值

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  

如何删除Regex中的特定url参数

为什么您特别想要使用正则表达式?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字符串中不是更容易吗?