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

时间:2018-01-25 14:54:02

标签: c# regex

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

3 个答案:

答案 0 :(得分:2)

正则表达式:

(?:^|&)[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指出)

See it live here at ideone

答案 1 :(得分:2)

您绝对不需要为此推送自己的正则表达式,请尝试使用HttpUtility.ParseQueryString()

>LIST.INDEX EC_WORK_ORDER_REQUEST_STATUS
Index name(s):  EC_WORK_ORDER_REQUEST_ID
Alternate Key Index Summary for file EC_WORK_ORDER_REQUEST_STATUS
File........... EC_WORK_ORDER_REQUEST_STATUS
Indices........ 1 (0 A-type, 0 C-type, 1 D-type, 0 I-type, 0 SQL, 0 S-type)
Index Updates.. Enabled, No updates pending

Index name      Type  Build    Nulls  In DICT  S/M  Just Unique Field num/I-type
EC_WORK_ORDER_RE D    Not Reqd  No     Yes      S    R     N    1

小提琴here

答案 2 :(得分:0)

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

sed -i 's/"$stringreplace"/"$stringnew"/g'

也许你的意思是

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