0

私はこのようなファイルurl.dataにURLのリストを持っています

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

リンク関数を使用して文字列の配列をロードします

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

Urisの左側の部分を次のように配列に入れたい

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

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 に答える