2012-01-23 2 views
0

Можно создать дубликат:
How to parse a query string into a NameValueCollection in .NETИзвлечение, специфические части строки в C#

У меня вход в

https://localhost:8181/PortalSite/View/CommissionStatement.aspx?status=commission&quarter=1; 

Выход требуется

status=commission 

Как сделать в C# (желательно регулярное выражение или что-то еще) ..

Мое решение

var res = src.Split('?')[1].Split('=')[1].Split["&"][0]; 

но неудачу в Split [ "&"]

+0

> но сбой в Split ["&"] - может быть, 'Split (" & ")'? – Samich

+0

@Samich Split ('&') - это с одной цитатой, для char. – Bakudan

+0

Да .. Я не обращал внимания на цитаты. Благодарю. – Samich

ответ

6

Если то, что вы собираетесь гарантированно быть URL со строкой запроса, я бы рекомендовал HttpUtility.ParseQueryStringMethod.

var result = HttpUtility.ParseQueryString(new Uri(src).Query); 
6

Примечание что в подобных случаях общая ошибка заключается в том, чтобы просто собрать некоторую функцию обработки строк, которая не может справиться с полной возможной спецификацией ввода. В вашем случае существует много допустимых URL-адресов, которые на самом деле довольно сложно обрабатывать/разбирать правильно. Поэтому вы должны придерживаться уже реализованных проверенных классов.

Таким образом, я бы использовал класс System.Uri, чтобы использовать строку URL. Часть URL-адреса, к которой вы на самом деле пытаетесь получить доступ, - это так называемый «запрос», который также является свойством экземпляра Uri. Сам запрос можно легко и правильно получить в виде отдельных частей ключевого значения, используя System.Web.HttpUtility.ParseQueryStringMethod() (вам нужно добавить System.Web.dll к ссылкам вашего проекта и убедиться, что вы не используете профиль клиента .NET 4 для своего приложения, так как это будет не включайте эту сборку).

Пример:

Uri u = new Uri("https://localhost:8181/PortalSite/View/CommissionStatement.aspx?status=commission&quarter=1;"); 
Console.WriteLine(u.Query); // Prints "status=commission&quarter=1;" 

var parameters = HttpUtility.ParseQueryString(u.Query); 
Console.WriteLine(parameters["status"]); // Prints "commission" 

После того, как у вас есть "параметры" можно также перебирать их, искать их и т.д. YMMV.

Если вам нужен вывод, который вы видите в своем вопросе, то знаете, что вам всегда нужен первый параметр строки запроса (и не можете найти его по имени, как показано выше), тогда вы можете используйте следующее:

string key = parameters.GetKey(0); 
Console.WriteLine(key + "=" + parameters[key]); // Prints "status=commission" 
2

Вы можете использовать следующее регулярное выражение: status=(\w*) Но я думаю, что есть лучшие альтернативы, как с помощью HttpUtility.ParseQueryStringMethod.

Смежные вопросы