正则表达式以匹配HTML代码中的模式

时间:2013-12-26 12:49:55

标签: c# regex

我从网络浏览器中获取以下代码。

我的源代码:(Html)

<dl class="field-dl output-field-dl" >
    <dt class="field-dt output-field-dt">
        <label><span>Product Code:</span></label>
    </dt>
    <dd class="field-dd output-field-dd ">
            0234567
    </dd>
</dl>

<dl class="field-dl output-field-dl" >
    <dt class="field-dt output-field-dt">
        <label><span>Per no:</span></label>
    </dt>
    <dd class="field-dd output-field-dd ">
            123456
    </dd>
</dl>

如何提取产品代码?

我目前的代码在这里:

var rx = new Regex("<span>Product Code:</span></label></dt><dd class=\"field-dd output-field-dd \">(.*?)</dd>\\s");            
var m = rx.Matches(kaynak);
foreach (Match match in m)
{
    string key = match.Groups[1].Value;
}

谢谢!

2 个答案:

答案 0 :(得分:0)

示例代码比正则表达式句柄有更多的空白区域。您可以在每\s*之前和每<之后添加>,但在它们之间只能添加一个new Regex("<span>\\s*Product Code:\\s*</span>\\s*</label>\\s*</dt>\\s*<dd class=\"field-dd output-field-dd \">(.*?)</dd>\\s"); 。类似的东西:

(.*?)

捕获组([^<>])可能过于慷慨。我建议.。如果您更喜欢.,则可能需要将正则表达式设置为接受new Regex(... , RegexOptions.Singleline); 中的换行符。所以考虑使用:

{{1}}

然而,正如其他人所说,使用HTML或XML解析例程可能更好。这个答案只与你问题的正则表达式部分有关。

答案 1 :(得分:0)

您可以使用LINQ to XML:

XElement doc = XElement.Parse(html);
var query = doc.Descendants("dd").Select(elem => elem.Value).ToList();

foreach (var v in query)
    Console.WriteLine(v);