【问题标题】:Finding something specific from HTML从 HTML 中查找特定内容
【发布时间】:2012-12-18 15:10:23
【问题描述】:

我有一个如下所示的字符串:

<br /><br />\n\n<p><font size=\"4\" face=\"Courier New\"> TSX Symbol Changes -December    
17th - December 21st</font><br>

我需要做的是退出 TSX 符号更改 - 12 月 17 日 - 12 月 21 日。我已经阅读过 Regex.IsMatch 适用于这种情况的各种其他帖子,但我遇到的问题是 12 月 17 日至 21 日每周都会发生变化(即,当我下周运行我的代码时,名称将更改为 TSX Symbol Changes - December 24 日至 12 月 28 日)。那么无论如何我可以只查找 TSX 符号更改,一旦找到,也可以检索它之后的日期?

【问题讨论】:

  • 如果需要解析html,请使用Html Agility Pack
  • 如果您确定“TSX”始终位于字符串的开头,只需在字符串中找到该子字符串的索引并向前计数到您知道的第一个“”是开头的 HTML。然后,您可以使用开始和结束索引获取子字符串。

标签: c# .net html-parsing


【解决方案1】:

你可以试试下面的代码。

    var str1 = "<br /><br />\n\n<p><font size=\"4\" face=\"Courier New\"> TSX Symbol Changes -December 17th - December 21st</font><br>";
    var str2 = str1.Substring(str1.IndexOf("TSX Symbol Changes")).Replace("</font><br>","");

【讨论】:

    【解决方案2】:

    如果需要解析 html,请使用 Html Agility Pack

    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);  // this is your string
    
    string wordToFind = "TSX Symbol Changes -";
    var fontTSX = doc.DocumentNode.Elements("font")
        .FirstOrDefault(f => f.InnerText.Contains(wordToFind));
    if (fontTSX != null)
    {
        string innerText = fontTSX.InnerText.Trim();
        innerText = innerText.Substring(innerText.IndexOf(wordToFind) + wordToFind.Length);
        String[] words = innerText.Split();
        String monthName = words.First();
        var monthInfo = CultureInfo.InvariantCulture.DateTimeFormat.MonthNames
            .Select((mn, i) => new{ MonthName = mn, Value = i+1 })
            .FirstOrDefault(x => x.MonthName.Equals(monthName, StringComparison.OrdinalIgnoreCase));
        if (monthInfo != null)
        {
            int month = monthInfo.Value;
            int day = int.MinValue;
            // now extract your range
            IEnumerable<int> days = words
                .Where(w => w.Length >= 2 && int.TryParse(w.Substring(0, 2), out day))
                .Select(w => day)
                .Take(2);
            if(days.Count() == 2)
            {
                DateTime startDate = new DateTime(DateTime.Now.Year, month, days.ElementAt(0));
                DateTime endDate = new DateTime(DateTime.Now.Year, month, days.ElementAt(1));
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2015-04-29
      相关资源
      最近更新 更多