读书人

正则表达式抓取网页中某个人发表的内容

发布时间: 2012-05-08 22:09:41 作者: rapoo

正则表达式抓取网页中某个人发表的内容
<TABLE><TR><TD>作者:张三 回复日期:2010-10-01 14:06:19</TD></TR></table>
<div>张三发表的内容一</div>

<TABLE><TR><TD>作者:李四 回复日期:2010-10-02 13:06:29</TD></TR></table>
<div>李四发表的内容.<br></div>

<TABLE><TR><TD>作者:张三 回复日期:2010-10-03 15:06:39</TD></TR></table>
<div>张三发表的内容二</div>

<TABLE><TR><TD>作者:张三 回复日期:2010-10-04 16:06:49</TD></TR></table>
<div>张三发表的内容三</div>

<TABLE><TR><TD>作者:王五 回复日期:2010-10-05 17:06:11</TD></TR></table>
<div>王五发表的内容</div>

上面的内容中,我只想获取到张三发表的内容,即结果为:

张三发表的内容一 回复日期:2010-10-01 14:06:19
张三发表的内容二 回复日期:2010- 10-03 15:06:39
张三发表的内容三 回复日期:2010-10-04 16:06:49

请问正则表达式该怎么写,或者有什么好的解决思路提供下,谢谢了!!

[解决办法]
因你的排版格式"三表容一"在日期之後,所以不可能一正表示式就成你要的出格式。

而如果你的格式是固定的,用取代就可以了。

整文件如果是逐行入的,那可以用空白行做一次隔,把到的行取代掉HTML,
然後行再出。

整文件如果是一次入,先用行做字串切割(split),然後每字串再用一行切割,
一取代掉HTML在出。
[解决办法]

Java code
public static void main(String[] args) {        String str = "<TABLE><TR><TD>作者:张三 回复日期:2010-10-01 14:06:19</TD></TR></table>\n";        str += "<div>张三发表的内容一</div>\n";        str += "<TABLE><TR><TD>作者:李四 回复日期:2010-10-02 13:06:29</TD></TR></table>\n";        str += "<div>李四发表的内容.<br></div>\n";        str += "<TABLE><TR><TD>作者:张三 回复日期:2010-10-03 15:06:39</TD></TR></table>\n";        str += "<div>张三发表的内容二</div>\n";        str += "<TABLE><TR><TD>作者:张三 回复日期:2010-10-04 16:06:49</TD></TR></table>\n";        str += "<div>张三发表的内容三</div>\n";        str += "<TABLE><TR><TD>作者:王五 回复日期:2010-10-05 17:06:11</TD></TR></table>\n";        str += "<div>王五发表的内容</div>\n";        Matcher m = Pattern.compile("(回复日期:\\d{4}-\\d{2}-\\d{2}[ \\s*]\\d{2}:\\d{2}:\\d{2}).*?<div>(张三.*?)</div>",Pattern.DOTALL).matcher(str);        while(m.find()){            System.out.println(m.group(2)+" "+m.group(1));        }    }
[解决办法]
try...

Java code
        String pattern = "(?is)作者:张三\\s*((?:(?!</td>).)+)";        Matcher m = Pattern.compile(pattern).matcher(test);        while(m.find())        {            System.out.println(m.group(1));        } 

读书人网 >J2SE开发

热点推荐