2

首先:对不起我的英语不好!

我知道标题不是最好的英语,但我真的不知道如何格式化这个问题......
我想做的是逐行阅读 HTML 源代码,以便当它看到给定的单词时(比如http://) 它复制了整个句子,所以我可以去掉其余部分,只保留 URL。

这是我尝试过的:

using (var source = new StreamReader(TempFile))
{
    string line;
    while ((line = source.ReadLine()) != null)
    {
        if (line.Contains("http://"))
        {
            Console.WriteLine(line);
        }
    }
}

如果我想从外部文件中读取它,这非常有效,但是当我想读取字符串或字符串生成器时它不起作用,你如何逐行读取这些?

4

5 回答 5

7

你可以用new StringReader(theString)a 来做到这一点string,但我质疑你的整体策略。使用 HTML Agility Pack 之类的工具会更好。

例如,这里是提取所有超链接的 HTML Agility Pack:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(theString);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href]")
{
   HtmlAttribute att = link["href"];
   Console.WriteLine(att.Value);
}
于 2012-07-10T22:27:52.377 回答
0

那么字符串只是一个字符串,它没有任何行。

您可以在符号上使用类似String.Split分隔的东西。\r

MSDN:字符串.Split()

string words = "This is a list of words, with: a bit of punctuation" +
                       "\rand a newline character.";

string [] split = words.Split(new Char [] {'\r' });

foreach (string s in split) {
    if (s.Trim() != "")       
        Console.WriteLine(s);
}
于 2012-07-10T22:27:03.537 回答
0

首先,您可以使用StringReader

另一种选择是通过首先将字符串转换为字节数组来从字符串创建MemoryStream,如https://stackoverflow.com/a/10380166/396583中所述

于 2012-07-10T22:32:46.333 回答
0

我认为您可以标记输入并检查每个条目以获取所需内容。

 string[] info = myStringBuilder.toString().split[' '];
 foreach(var item in info) {
 if(item.Contains('http://') {
    //work with it
    }
 }
于 2012-07-10T22:35:10.457 回答
0

您可以使用内存流进行读取。

于 2012-07-10T22:36:31.877 回答