【问题标题】:How can I find a word in a C# string如何在 C# 字符串中找到单词
【发布时间】:2012-07-07 00:22:38
【问题描述】:

我需要从互联网上加载一个长字符串,我已经做到了。现在我需要找到H1 标头标签并打印内容。

什么是最短或最简单的方法?

for (int x = 0; x < tempString.Length; x++)
{

    if (write == 2)
    {
        name =name + tempString[x];
        lenght++;
    }
    if (tempString[x] == '<' && tempString[x] == 'h' && tempString[x] == '1' )
        write = 1;

    if (write == 1 && tempString[x] == '>')
        write = 2;

    if (tempString[x] == '-' && write == 1)
        write = 0;
}

我知道怎么说奇怪。但这就是我所拥有的。

【问题讨论】:

  • 感谢您的所有帮助,但 atm 我不知道谁给出了最佳答案,因为我在服务器连接上遇到 404 错误

标签: c# html-parsing


【解决方案1】:

使用HTML Agility Pack - 几乎您尝试的任何其他操作都会导致您获得headache

HtmlAgility 示例:

var html = "<html><head></head><body><h1>hello</h1></body></html>";

HtmlDocument d = new HtmlDocument();
d.LoadHtml(html);

var h1Contents = d.DocumentNode.SelectSingleNode("//h1").InnerText;

【讨论】:

  • 嗯,不是任何东西,但人们尝试的大多数事情都会。
  • @JeremyHolovacs 添加了关于 Regex 为什么不起作用的强制性答案;)
【解决方案2】:

使用 HTML 库!

否则试试:

String.IndexOf(String x )

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

您可以使用它来获取开始和结束标签的第一个索引。然后,您可以在这些索引之间进行阅读。

【讨论】:

    【解决方案3】:

    如果您想在平面 C# 中执行此操作,并且您只查看 1 个标签:

    int first_tag = str.IndexOf("<H1>");
    int last_tag = str.IndexOf("</H1>");
    string text = str.SubString((first_tag + 4), (last_tag - first_tag));
    

    【讨论】:

    • 您可能需要对子字符串调用进行一些偏移。否则它将包含

      txt.

    • 谢谢。加+4(

      标签的长度)

    • 当标题标签分配了一个类时会发生什么?
    • @JeremyHolovacs 我完全理解,在这种情况下,您需要进行更多检查,但我认为这不是 OP 所需要的。如果 OP 需要这些信息,我相信我们可以解决:D
    【解决方案4】:

    System.String 类具有 IndexOf(String) 等方法 - 报告指定字符串第一次出现的从零开始的索引。

    所以在你的情况下,你可以传入"&lt;H1&gt;"。然后你可以得到一个从那个点开始的子字符串,然后再次调用这个方法再次寻找"&lt;/H1&gt;"

    或者,如果您愿意,在 .NET 中使用正则表达式可能会更容易。这些位于 System.Tet.RegularExpressions 命名空间中。这些肯定更复杂。但我相信你可以练习使用一些小样本并了解黑暗面的力量! (errr....) 正则表达式的威力! :)

    [edit] 既然我看到了其他人的答案,我绝对同意其他人的看法。如果您需要做的事情比在 HTML 格式的字符串中获取一项更复杂,请使用 html 解析器。

    【讨论】:

      【解决方案5】:

      以上所有工作都很好,我只是不能使用任何外部库

      这对我很有效

      for (int x = 0; x < tempString.Length; x++)
              {
      
                  if (tempString[x] == '-' && write == 2)
                  { write = 0; }
      
                  if (write == 2)
                  {
                      title =title + tempString[x];
                      lenght++; 
                  }
                  if (tempString[x] == '<' && tempString[x+1] == 'h' && tempString[x+2] == '1' )
                  { write = 1; }
      
                  if (write == 1 && tempString[x] == '>')
                  { write = 2; }
      
      
              }
      

      【讨论】:

      • indexof 不是外部库。你和你说的代码基本一样,被你的大学拒绝了3次。你有没有问过你的教授为什么它被拒绝了 3 次?
      • 是的,纯粹是愚蠢的第一次没有语言标签女巫我不知道,因为它都是英文的。我第二次解析链接标题而不是段落标题唯一的区别是有时会有一个 upacse 而不是一个低的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 2016-04-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多