在C#中提取字符串的特定部分

use*_*901 0 c#

可能重复:
如何将查询字符串解析为.NET中的NameValueCollection

输入

https://localhost:8181/PortalSite/View/CommissionStatement.aspx?status=commission&quarter=1;
Run Code Online (Sandbox Code Playgroud)

需要输出

status=commission
Run Code Online (Sandbox Code Playgroud)

怎么做C#(最好是正则表达式或别的东西)..

我的解决方案

var res = src.Split('?')[1].Split('=')[1].Split["&"][0];
Run Code Online (Sandbox Code Playgroud)

但在Split ["&"]中失败

Chr*_*n.K 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"
Run Code Online (Sandbox Code Playgroud)

一旦你有了"参数",你也可以迭代它们,搜索它们等等.YMMV.

如果您需要在问题中显示的输出,因此知道您始终需要查询字符串的第一个参数(并且无法按照我上面所示的名称查找它),那么您可以使用以下内容:

string key = parameters.GetKey(0);
Console.WriteLine(key + "=" + parameters[key]); // Prints "status=commission"
Run Code Online (Sandbox Code Playgroud)


Vis*_*ons 6

如果您要保证的是带有查询字符串的URL,我建议使用HttpUtility.ParseQueryStringMethod.

var result = HttpUtility.ParseQueryString(new Uri(src).Query);
Run Code Online (Sandbox Code Playgroud)