读书人

.Net采集正则有关问题?

发布时间: 2012-08-21 13:00:22 作者: rapoo

.Net采集正则问题?急
<table class="ProductSubDetailsText" border="0" cellpadding="10" style="width: 530px; ">
<tr align="left" >
<td class="ProductSubDetailsHead" valign="bottom" style="height:25px;">产品介绍</td>
</tr>
<tr>
<td align="left"><ul>
<li>消除细菌引起的恼人气味</li>
<li>持久保持肌肤光滑</li>
<li>适用於运动後或出汗後不便洗澡的尴尬情况</li>
<li>具怡人的玫瑰气味</li>
</ul></td>
</tr>
</table>

我现在要取出:
消除细菌引起的恼人气味
持久保持肌肤光滑
适用於运动後或出汗後不便洗澡的尴尬情况
具怡人的玫瑰气味

string Productinfo = GetRegValue("<td align=\"left\"><ul>(.*)</ul></td>", jg1);

一直取不到数据,不知道正则错在那里了?


[解决办法]

C# code
string Productinfo = GetRegValue("<td align=\"left\">\s*<ul>(\s*<li>([^<]*)</li>\s*)*</ul></td>", jg1);
[解决办法]
"<td align=\"left\"><ul>(.*)</ul></td>"

=》

"<td align=\"left\"><ul>([\s\S]*?)</ul></td>"

[解决办法]
为什么要用正则?为什么不通过HTML DOM解析获取?
[解决办法]
'.'的话需要指定单行模式,可以在正则表达式开头附加"(?s)"子串指定单行模式。
[解决办法]
List<string> list = new List<string>();
Regex reg = new Regex("<(?<tag>li)[^>]*.*?>(?<content>.*?)</\k<tag>>
", RegexOptions.IgnoreCase | RegexOptions.Singleline);
MatchCollection mc = reg.Matches(html);
if (mc.Count > 0)
{
foreach (Match m in mc)
{
list.Add(m.Groups["content"].Value);
}
return list.ToArray();
}
[解决办法]
我个人认为,关于处理 XML 的地方,如果不涉及到非常特殊的数据,能用 Linq To XML 就用 Linq To XML。

读书人网 >C#

热点推荐