正则表达式[^< ^>] *匹配最多6个字符;不会匹配7?

时间:2013-12-21 01:40:48

标签: regex vb.net

我一直在使用正则表达式来测试我的正则表达式,并且无法理解为什么我现在正在测试的那个失败。

我已经查阅了几个正则表达式的教程和参考资料,但仍然没有看到任何可以解释我遇到这些问题的原因。

我正在测试的正则表达式是:

(<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;不?我完全糊涂了。

2 个答案:

答案 0 :(得分:0)

如果可能的话,我会避免抓取某个人的网站(理想情况下你想要提取数据Feed)。

否则,如果您只是从http://www.coj.net/departments/office-of-economic-development/film-and-television/production-guide/production-guide-listings.aspx#prodSupport

中提取链接

...我只会抓取<strong>(或您感兴趣的任何单个标签)。如果你最终得到一点垃圾,只需手动删除你不想要的数据。复杂的正则表达式将非常脆弱,并且在更新css或略微调整页面布局时会中断。

答案 1 :(得分:0)

我已经开始使用稍微容易出错的错误了:

(<p>(?:(?!</p>).)*</p>)?\s*<ul>(.*?)</ul>

让我至少继续这份工作。

我检查第一个捕获组以查看它是否为空字符串,如果不是,我去:

input = Regex.Replace(输入,“&lt; [^&gt;] *&gt;”,“”)

删除标签并留下类别文本。快速,高效,即使它有点脏。