【问题标题】:C# - Convert HTML unordered list to arrayC# - 将 HTML 无序列表转换为数组
【发布时间】:2014-07-17 07:17:16
【问题描述】:

我的HTML字符串是这样的,存储在一个名为sourceCode的变量中

    <ul class="yom-list col first" style="width:33.333333333333%">
    <li class="first">
      <a href="/india/andaman-and-nicobar-islands/">
        <span>Andaman and Nicobar Islands</span>
      </a>
    </li>
      <li>
      <a href="/india/jammu-and-kashmir/">
        <span>Jammu and Kashmir</span>
      </a>
    </li>
    <li class="last">
      <a href="/india/andhra-pradesh/">
        <span>Andhra Pradesh</span>
      </a>
    </li>
      <li>
      <a href="/india/jammu-and-kashmir/">
        <span>Jammu and Kashmir</span>
      </a>
    </li>

  </ul>

我想将其转换为通用列表 这样我就可以在我的代码中访问其中的数据,例如 href、name 等。 我已经尝试过这样的事情

            foreach (Match match in Regex.Matches(sourceCode, @"<li><a href=""(?<url>[^""])</a></li>"))
            items.Add(new Item()
            {

                name = match.Groups["span"].Value, // i don't know how to get value inside that span
                url = match.Groups["url"].Value,

            });

但它不起作用,可能正则表达式是错误的。谁能告诉我我做错了什么? 注意:我不能在这个项目中使用 HTMLAgilityPack

【问题讨论】:

  • 如果您使用XHTML,尝试使用 XML Parser 怎么样?
  • @rhughes 这只是一个字符串,其中包含 html 标签

标签: c# html regex


【解决方案1】:

仅当 &lt;li&gt; 标记中存在 &lt;a href&gt; 标记和 &lt;span&gt; 标记之间的值时,请尝试以下正则表达式。

/<li>\s*<a href=\"(?<url>[^"]*)\">\s*<span>(?<span>[^<]*)<\/span>/m

DEMO

您的c# 代码将是,

Regex rgx = new Regex(@"<li>\s*<a href=""(?<url>[^""]*)"">\s*<span>(?<span>[^<]*)</span>");
foreach (Match m in rgx.Matches(input))
{
Console.WriteLine(m.Groups["url"].Value);
Console.WriteLine(m.Groups["span"].Value);
}

IDEONE

【讨论】:

  • 我无法在我的 C# 代码中添加这个正则表达式可能语法不同
  • @Athul 查看我的回答中的 IDEONE 链接。
猜你喜欢
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 2021-12-11
  • 2020-04-30
相关资源
最近更新 更多