我正在尝试使用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
答案 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指出)
答案 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;
....