C#删除空url参数正则表达式

我试图使用C#从字符串中删除空的url类型参数。 我的代码示例在这里。

public static string test () { string parameters = "one=aa&two=&three=aaa&four="; string pattern = "&[a-zA-Z][a-zA-Z]*=&"; string replacement = ""; Regex rgx = new Regex(pattern); string result = rgx.Replace(parameters, replacement); return parameters; } public static void Main(string[] args) { Console.WriteLine(test()); } 

我在rextester中尝试了代码

输出: one=aa&two=&three=aaa&four=

预期输出: one=aa&three=aaa

正则表达式:

 (?:^|&)[a-zA-Z]+=(?=&|$) 

这匹配字符串的开头或&符号( (?:^|&) )后跟至少一个(英文)字母( [a-zA-Z]+ ),等号( = )然后什么都没有,通过正向前瞻( (?=&|$) )匹配字符串结尾或新参数(由&开始)。

码:

 public static string test () { string parameters = "one=aa&two=&three=aaa&four="; string pattern = "(?:^|&)[a-zA-Z]+=(?=&|$)"; string replacement = ""; Regex rgx = new Regex(pattern); string result = rgx.Replace(parameters, replacement); return result; } public static void Main(string[] args) { Console.WriteLine(test()); } 

请注意,这也会返回正确的变量(正如Joel Anderson所指出的那样)

在ideone上看到它 。

你绝对不需要为此推出自己的Regex,尝试使用HttpUtility.ParseQueryString() :

 public static string RemoveEmptyUrlParameters(string input) { var results = HttpUtility.ParseQueryString(input); Dictionary nonEmpty = new Dictionary(); foreach(var k in results.AllKeys) { if(!string.IsNullOrWhiteSpace(results[k])) { nonEmpty.Add(k, results[k]); } } return string.Join("&", nonEmpty.Select(kvp => $"{kvp.Key}={kvp.Value}")); } 

在这里小提琴

函数不返回正则表达式替换的结果。 该函数返回变量“parameters”,它永远不会更新或更改。

 string parameters = "one=aa&two=&three=aaa&four="; ... string result = rgx.Replace(parameters, replacement); return parameters; .... 

也许你的意思

 return results;