C# - 将HTML无序列表转换为数组

时间:2014-07-17 07:17:17

标签: c# html regex

我的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

1 个答案:

答案 0 :(得分:2)

尝试使用以下正则表达式获取<a href>代码和<span>代码之间的值,只有<li>代码中包含该代码。

/<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