Если вы действительно не можете исправить URL, вы все равно можете попытаться разобрать его, но вам нужно принять некоторые решения. Например:
- Ключи могут содержать только буквенно-цифровые символы.
- Пустых значений нет или, по крайней мере, всегда есть знак равенства
=
после клавиши
- Значения могут содержать дополнительные амперсанды и знаки вопроса.
- Значения могут содержать дополнительные знаки равенства, если они не являются частью новой пары ключ / значение (им не предшествует
&\w+
)
Один из возможных способов захвата этих пар:
MatchCollection matches = Regex.Matches(s, @"\G[?&](?<Key>\w+)=(?<Value>.*?(?=$|&\w+=))");
var values = matches.Cast<Match>()
.ToDictionary(m => m.Groups["Key"].Value,
m => HttpUtility.UrlDecode(m.Groups["Value"].Value),
StringComparer.OrdinalIgnoreCase);
Затем вы можете получить значения:
string tax4 = values["tax4Elem"];
Обратите внимание, что если строка запроса "недействительна" согласно нашему правилу, шаблон может не охватить все значения.