1

私はこのコードを試しました:

private void RemoveLines(List<string> Keywords)
        {
            string NewText = "";
            String regex = string.Empty;
            this.Invoke(new MethodInvoker(delegate { NewText = richTextBox1.Text; }));
            Regex MyRegex = null;
            foreach (string keyword in Keywords)
            {
                regex = String.Format(@"^.*\W{0}\W.*$",keyword);
                MyRegex = new Regex(regex, RegexOptions.Multiline);
                NewText = MyRegex.Replace(NewText, Environment.NewLine);
            }
            //Remove blank lines
            NewText = Regex.Replace(NewText, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
            this.Invoke(new MethodInvoker(delegate { richTextBox1.Text = NewText; }));
            this.Invoke(new MethodInvoker(delegate { richTextBox1.Refresh(); }));
        }

そして、removeExtrenals関数:

private List<string> removeExternals(List<string> externals)
        {
            if(!LocalyKeyWords.ContainsKey(mainUrl))
            {
                return externals;
            }
            List<string> keywords = LocalyKeyWords[mainUrl];
            List<int> indices = new List<int>();
            foreach(string keyword in keywords)
            {
                //Accumulate a list of the indices of the items that match.
                indices = indices.Concat(externals.Select((v, i) => v.Contains(keyword) ? i : -1)).ToList();
            }
            //Filter out the -1s, grab only the unique indices.
            indices = indices.Where(i => i >= 0).Distinct().ToList();
            //Filter out those items that match the keyword(s) related to mainUrl.
            externals = externals.Where((v, i) => !indices.Contains(i)).ToList();
            return externals;
        }

そして、この関数でremovelinesとremoveexternalsを呼び出します。

RemoveLines(removeExternals(webSites));

ブレークポイントを使用した後のremoveExternalsで、google(例ではキーワードimを使用)を含まない2つのサイトが表示されるため、18のURLからrichTextBoxに16のURLのみが表示されます。removelines関数でもブレークポイントを使用しましたが、例外はありません。 richTextBox内のすべてのURL。

4

1 に答える 1

1

次のようにしてみてください:
テスト用にランダムなデータを追加しました。

private void Form1_Load(object sender, EventArgs e)
    {
        richTextBox1.AppendText(@"Loading The Url:   http://www.blogger.com/?tab=wj... Failed ");
        richTextBox1.AppendText(Environment.NewLine);
        richTextBox1.AppendText(@"Loading The Url:   http://www.google.co.il/intl/iw/options/... Done  ");
        richTextBox1.AppendText(Environment.NewLine);
        richTextBox1.AppendText(@"Loading The Url:   http://www.xyz.com/?tab=wj... Failed ");
        richTextBox1.AppendText(Environment.NewLine);
        richTextBox1.AppendText(@"Loading The Url:   http://www.abc.com/?tab=wj... Done ");
        richTextBox1.AppendText(Environment.NewLine);
        richTextBox1.AppendText(@"Loading The Url:   http://www.so.com/?tab=wj... Failed ");
        richTextBox1.AppendText(Environment.NewLine);
        keys.Add("xyz");
        keys.Add("abc");
        RemoveLines(keys);
    }  

RemoveLinesこれがメソッド のコードです。

private void RemoveLines(List<string> Keywords)
    {
        String regex = string.Empty;
        string NewText = richTextBox1.Text;            
        Regex MyRegex = null;
        foreach (string keyword in Keywords)
        {
            regex = String.Format(@"^.*\W{0}\W.*$",keyword);
            MyRegex = new Regex(regex, RegexOptions.Multiline);
            NewText = MyRegex.Replace(NewText, Environment.NewLine);
        }
        //Remove blank lines
        NewText = Regex.Replace(NewText, @"^\s+$[\r\n]*", "", RegexOptions.Multiline); 
        richTextBox1.Text = NewText;
        richTextBox1.Refresh();
    }  

それが役に立てば幸い !

于 2012-10-09T06:43:36.860 に答える