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;