0

I have a list of Url in file url.data like this

http://site1.org/info.php
http://site2.com/info/index.php
http://site3.edu/

I load in array of string with link function

string[] asUrlData = File.ReadAllLines("url.data").Where(s => !string.IsNullOrEmpty(s)) 
                                                  .Distinct().
                                                  .ToArray();

I want to get the left parts of Uris in the array like

http://site1.org/
http://site2.com/info/
http://site3.edu/

Is there any way to do this using LINQ?

4

2 回答 2

2

你可以使用URI类。用于IsWellFormedUriString检查它是否格式正确并strUri.Substring(0, strUri.LastIndexOf('/') +1获取没有文件的权限+路径。

String[] uris = File.ReadLines(path)
            .Where(u => Uri.IsWellFormedUriString(u, UriKind.Absolute))
            .Select(u => { 
                var p = new Uri(u).ToString();
                return p.Substring(0, p.LastIndexOf('/') +1); 
            })
            .Distinct()
            .ToArray();

Console.Write(String.Join(Environment.NewLine, uris));

编辑:这是一个演示:http: //ideone.com/Uckov

于 2012-08-22T11:53:11.023 回答
0

Tim Schmelter 发布了很好的解决方案,但我想出了另一个使用正则表达式的解决方案

如果您不想轻松操作输出 URL 表单,这可能会更好。

string[] urls2 = urls
                .Select(s => Regex.Match(s, @"(http://){0,1}[a-z0-9\-\.]{1,}\.[a-z]{2,5}", RegexOptions.IgnoreCase).ToString())
                .Where(s => !string.IsNullOrEmpty(s))
                .ToArray();

如果正则表达式将是从配置文件等中获取的字符串,您可以轻松更改它

演示:http: //ideone.com/nRR0m

PS @Tim Schmelter:这些演示的页面非常好,已添加到收藏夹;)

于 2012-08-22T14:47:44.060 回答