我一直在使用正则表达式来测试我的正则表达式,并且无法理解为什么我现在正在测试的那个失败。
我已经查阅了几个正则表达式的教程和参考资料,但仍然没有看到任何可以解释我遇到这些问题的原因。
我正在测试的正则表达式是:
(<p>\s*(?:(?:<font[^>]*>)*?(?:<a[^>]*>)*?(?:<strong[^>]*>)*?(?:</font>)*?(?:</a>)*?(?:</strong>)*?[^<^>]*)*</p>)?\s*<ul>(.*?)</ul>
有效的数据是:
<p><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><a href="#test1">test1</a> | <a href="#test2">test12</a></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif"><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif"><font size="2"><strong>Production </strong><a name="prodSupport"></a></font></font></font></font><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font size="2">stuff</font></strong> </font><a name="art"></a></p>
<ul>
<li><span style="font-family: Arial"><font size="1"><a id="Assistants" href="Assistants.aspx" name="Assistants">Assistants</a></font></span><font size="1"><a id="Assistants" href="Assistants.aspx" name="Assistants"></a></font></li>
</ul>
不起作用的数据是:
<p><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><a href="#test1">test1</a> | <a href="#test2">test123</a></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif"><font size="2"><font face="Verdana, Arial, Helvetica, sans-serif"><font size="2"><strong>Production </strong><a name="prodSupport"></a></font></font></font></font><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font size="2">stuff</font></strong> </font><a name="art"></a></p>
<ul>
<li><span style="font-family: Arial"><font size="1"><a id="Assistants" href="Assistants.aspx" name="Assistants">Assistants</a></font></span><font size="1"><a id="Assistants" href="Assistants.aspx" name="Assistants"></a></font></li>
</ul>
为什么&#34; test12&#34;工作和&#34; test123&#34;不?我完全糊涂了。
答案 0 :(得分:0)
如果可能的话,我会避免抓取某个人的网站(理想情况下你想要提取数据Feed)。
中提取链接 ...我只会抓取<strong>
(或您感兴趣的任何单个标签)。如果你最终得到一点垃圾,只需手动删除你不想要的数据。复杂的正则表达式将非常脆弱,并且在更新css或略微调整页面布局时会中断。
答案 1 :(得分:0)
我已经开始使用稍微容易出错的错误了:
(<p>(?:(?!</p>).)*</p>)?\s*<ul>(.*?)</ul>
让我至少继续这份工作。
我检查第一个捕获组以查看它是否为空字符串,如果不是,我去:
input = Regex.Replace(输入,“&lt; [^&gt;] *&gt;”,“”)
删除标签并留下类别文本。快速,高效,即使它有点脏。