【问题标题】:C# remove empty url parameters regexC#删除空url参数正则表达式
【发布时间】:2018-01-25 14:54:02
【问题描述】:

我正在尝试使用 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

【问题讨论】:

标签: c# regex


【解决方案1】:

您绝对不需要为此推出自己的正则表达式,请尝试使用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}"));
}

小提琴here

【讨论】:

    【解决方案2】:

    正则表达式:

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

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

    代码:

    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 所指出的)

    See it live here at ideone.

    【讨论】:

    • 谢谢你的工作,当它可用时会接受你的回答
    【解决方案3】:

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

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

    也许你的意思

    return results;
    

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 2020-07-12
      • 2019-02-02
      • 2018-02-10
      • 2016-10-15
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多