【发布时间】:2015-12-30 16:19:53
【问题描述】:
我有一份文件,其中包含有关每个国家/地区的数据。每个表格行都是一个国家/地区:
<tr>
<td class="td-flag"><a href="/afghanistan"><img alt="Flag of Afghanistan" src="//flags.fmcdn.net/data/flags/mini/af.png" width="30" height="20" /></a></td>
<td class="td-country"><a href="/afghanistan">Afghanistan</a></td>
<td class="td-capital">Kabul</td>
<td class="td-population">25,500,100</td>
<td class="td-area">652,090 km<sup>2</sup></td>
</tr>
我尝试提取:链接到国旗、国家名称、captiol 和人口,但首先我需要分别插入Vector 中的每个表格行,所以我需要提取每个<tr>content</tr> 的内容。
问题:如何提取html文档中每个<tr>的内容?我根本没有匹配项:
try {
BufferedReader br = new BufferedReader(new FileReader("./data/countries.txt"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line + '\n');
}
br.close();
ArrayList<String> tableRows = new ArrayList<String>();
Pattern p = Pattern.compile(" <tr>(\\w+)</tr> ", Pattern.MULTILINE);
Matcher m = p.matcher(sb);
while (m.find()) {
System.out.println("match");//it never prints thus there are no matches
tableRows.add(m.group());
}
System.out.println(tableRows.size());//THE SIZE is 0
for (String tr : tableRows) {
System.out.println(tr);
}
} catch (Exception e) {
e.printStackTrace();
}
【问题讨论】:
-
我建议尝试使用 jsoup 进行解析。
-
正确的答案是使用现有的解析库,但更重要的是,模式周围的空格可能会破坏您的特定代码。
-
同样
" <tr>(\w+)</tr> "只能匹配(space)<tr>oneWord</tr>(space)。 -
@Pshemo 我后来添加了空格,删除后仍然没有找到内容。