0

这是我的 C# 列表项包含的概念

List<string> myList1 = new List<string>();

Urls some are: 
http://www.google.com

http://www.google.com/maps

http://www.google.com/?parm=vlue

/www.google.com/

他们目前驻留在列表变量 myList1

有没有办法识别每个 url 元素,比如

Scheme:http

host:www.google.com

path:/maps

query:?parm=value

并将这些元素设置为 bool 所以如果它是真的做一些事情如果它是假的做其他事情我什至不知道从哪里开始尝试正则表达式但没有任何运气

4

2 回答 2

2

将列表变成URI实例:

var uris = myList1.Select(u => new Uri(u));

http://msdn.microsoft.com/en-us/library/system.uri.aspx

然后,您可以访问各种属性,例如 Scheme 和 Host。

假设我的清单中有这个(除其他外):

http://www.google.co.uk/search.php?searchterm=a

我可以先把它变成一个 Uri:

var uris = myList1.Select(u => new Uri(u));

现在我只想要那些将要并google.com拥有...schemehttps

var googleUris = uris.Where(u => u.Host.Contains("google") && u.Scheme.Equals("http"));

所以我现在只有 URI 会发送到 Google 并通过 https 访问它,很好,但它现在也在一个 URI 对象中,那么如果我只想将它作为完整的 URI 路径返回呢?

var fullURIsOfGoogleUris = googleUris.Select(u => u.AbsoluteUri);

这个最终列表现在只是字符串(您首先提供的完整 URI)。

你提到你想要它作为一个“布尔”值......你可以使用Any()它。使用我上面的例子,这将变成一行:

bool hasGoogleUris = myList1.Select(u => new Uri(u)).Any(u => u.Host.Contains("google") && u.Scheme.Equals("http"));

根据该列表true是否false包含包含google在其主机中的 URI 并通过http.

于 2013-03-20T15:11:15.387 回答
0

编辑:

基于 Arran 建议的示例代码:

           List<string> myList1 = new List<string>() { "http://www.google.com/?parm=vlue"};

            var uris = myList1.Select(u => new Uri(u));

            foreach (var uri in uris)
            {

                //"http"
                var schema = uri.Scheme;

                //www.google.com
                var host = uri.Host;

                //"?parm=vlue"
                var query = uri.Query;
            }

添加更多信息。可能有用

Uri.IsWellFormedUriString(myURL, UriKind.RelativeOrAbsolute)

在您的示例中:

IList<string> wellFormalteUriStrings = myList1.FindAll(url => Uri.IsWellFormedUriString(url, UriKind.Absolute));

列出wellFormalteUriStrings将仅包含来自myList1 的有效 URL字符串

参考:MSDN

于 2013-03-20T15:15:07.673 回答