日期:2014-05-18  浏览次数:20824 次

.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。