-1

我正在制作一个可以从我的大学网站获取新公告的 Android 应用程序。

这是网站中的 HTML 代码:

sample_html_code http://img690.imageshack.us/img690/1079/88210050.png

文字版:

<table border="1" width="90%" class="duyuru">
<tbody>
<tr>
<td>
<h3 class="duyuru">Additional Quotas for the Technical Electives</h3>
"19/09/2012"
<h4 class="duyuru">"Additional Quotas for Technical Electives offered in...</h4>
<span class="duyuru"></span>
<br>
<a href="news_image/96.doc">Download</a>
</td>
</tr>
</tbody>
</table>

通过使用下面的代码,我可以得到第一行和第三行“技术选修课的附加配额”和“......的附加配额”。但是,我无法获取位于 h3 和 h4 行之间的日期信息 (19/09/2012)。

String patternStr ="\\<h3 class=\"duyuru\".*?\\>(.*?)\\</h3\\>";
patternStr+="(.*?)";     // This line is problematic
patternStr+=".*?\\<h4 class=\"duyuru\".*?\\>(.*?)\\</h4\\>";

Pattern pattern = Pattern.compile(patternStr, Pattern.DOTALL);
Matcher matcher = pattern.matcher(content);

String name = "";
String date = "";
String details = "";

while (matcher.find()){

    name    = matcher.group(1);
    date = matcher.group(2);
    details = matcher.group(3);

    Announcement announcement = new Announcement();

    announcement.setName(name);
    announcement.setDate(date);
    announcement.setDetails(details);

    announcements.add(announcement);
}

我尝试使用

.*?\"(.*?)\"

但它没有用。当我这样做时,它会从以 h4 标记而不是日期信息开始的行中获取字符串“duyuru”。

任何人都知道如何获取日期信息?

提前致谢。

4

1 回答 1

1

您的正则表达式错过了输入中的换行符和空格。

我能想到的最简单的匹配是:

"\\<h3 class=\"duyuru\".*?\\>\\n?\\s*(.*?)\\n?\\s*\\</h3\\>"

但请记住,这样的正则表达式是高度特定于您的 HTML 的。

我的建议是查看一个真正的 Java 的 HTML 解析器,例如 TagSoup。一旦您开始使用其中一个,解析这种类型的 HTML 文档就变得轻而易举。

于 2012-12-08T13:52:36.760 回答