简体   繁体   中英

C# remove empty url parameters regex

I am trying to remove empty url type parameters from a string using C#. My code sample is here.

    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());
    }

I tried the code in rextester

output: one=aa&two=&three=aaa&four=

expected output: one=aa&three=aaa

You absolutely do not need to roll your own Regex for this, try using HttpUtility.ParseQueryString() :

public static string RemoveEmptyUrlParameters(string input)
{
    var results = HttpUtility.ParseQueryString(input);

    Dictionary<string, string> nonEmpty = new Dictionary<string, string>();
    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}"));
}

Fiddle here

Regex:

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

This matches start of string or an ampersand ( (?:^|&) ) followed by at least one (english) letter ( [a-zA-Z]+ ), an equal sign ( = ) and then nothing, made sure by the positive look-ahead ( (?=&|$) ) which matches end of string or a new parameter (started by & ).

Code:

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());
}

Note that this also returns the correct variable (as pointed out by Joel Anderson)

See it live here at ideone .

The results of the Regex replace is not returned by the function. The function returns the variable "parameters", which is never updated or changed.

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

Perhaps you meant

return results;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM