Надеюсь, без переписывания парсера или предварительной обработки строки.
Не думаю, что это возможно, но вот несколько краткая реализация, которая должна сработать:
string pattern = @"(?<=^|&)(\w+)(?==)=(\w+)(?=&?)";
string input = @"abc=123&ABC=456&abc=789";
Dictionary<string, string> parameters = new Dictionary<string, string>();
foreach (Match m in Regex.Matches(input, pattern))
{
if (parameters.ContainsKey(m.Groups[1].Value))
{
//preserve original behaviour, i.e. concat values of same parameters
parameters[m.Groups[1].Value] = parameters[m.Groups[1].Value] + "," + m.Groups[2].Value;
} else
{
parameters.Add(m.Groups[1].Value, m.Groups[2].Value);
}
}
Может произойти сбой с параметрами Юникода за пределами a-zA-Z0-9_
, поэтому вам, возможно, придется изменить регулярное выражение в соответствии с вашими потребностями.