我从网络浏览器中获取以下代码。
我的源代码:(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;
}
谢谢!
答案 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);