我正在尝试从html页面中提取数据,以便将它们存储在String数组
中在HTML页面中,值显示如下
<tbody>
<tr>
<td style="width: 14%;">88055</td>
<td style="width: 19%;" class="gris">Ville</td>
<td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/88055/" >Amos</a></td>
<td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/880/" >Abitibi</a></td>
</tr>
<tr>
<td style="width: 14%;">85080</td>
<td style="width: 19%;" class="gris">Village</td>
<td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/85080/" >Angliers</a></td>
<td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/850/" >Témiscamingue</a></td>
</tr>
<tr>
<td style="width: 14%;">87050</td>
<td style="width: 19%;" class="gris">Municipalité</td>
<td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/87050/" >Authier</a></td>
<td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/870/" >Abitibi-Ouest</a></td>
</tr>
我只需要提取href = Municipality
的字符串女巫意味着Amos,Angliers等......并将它们存储到一个字符串数组
中到目前为止,我已经尝试了这个,但我已经失去了
public static final String EXPRESSION = "";//How to write the regex expression?
String [] data = new String [20]
URL url = new URL("http://myur.com");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
while ((ligne = in.readLine()) != null) {
//What to write here?
}
in.close();
P.S:我知道最好的方法是使用HTML解析器,但我真的被迫采用这种方式
非常感谢,
低音
答案 0 :(得分:1)
您可以使用类似的内容对具有>
的网址进行硬编码匹配,并将文本内的文字转换为<
和 <tbody>
<tr>
<td style="width: 14%;">88055</td>
<td style="width: 19%;" class="gris">Ville</td>
<td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/88055/" >Amos</a></td>
<td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/880/" >Abitibi</a></td>
</tr>
<tr>
<td style="width: 14%;">85080</td>
<td style="width: 19%;" class="gris">Village</td>
<td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/85080/" >Angliers</a></td>
<td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/850/" >Témiscamingue</a></td>
</tr>
<tr>
<td style="width: 14%;">87050</td>
<td style="width: 19%;" class="gris">Municipalité</td>
<td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/87050/" >Authier</a></td>
<td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/870/" >Abitibi-Ouest</a></td>
</tr>
字符。
这是我的数据文件:
import java.util.*;
import java.util.regex.*;
import java.lang.*;
import java.io.*;
class test
{
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader in = new BufferedReader(new FileReader(new File("data")));
String line="";
Pattern p=Pattern.compile("href\\s*=\\s*(?:\"|').*municipalite/[^>]*>(?:<.*>)*([^<]*)<.*$");
while ((line = in.readLine()) != null)
{
Matcher m=p.matcher(line);
while(m.find())
System.out.println(m.group(1));
}
in.close();
}
}
这是java文件:
$ javac test.java
$ java test
Amos
Angliers
Authier
$
输出:
href\\s*=\\s*(?:\"|').*municipalite/[^>]*>(?:<.*>)*([^<]*)<.*$
正则表达式细分:
href\\s*=\\s*
=
匹配后跟0或更多空格的href
按(?:\"|')
然后按0或更多空格
(?:)
- &gt; .*municipalite/
表示非捕获组,即匹配
单引号或双引号但不记录/记住
municipalite/
匹配任何字符,直到[^>]*>(?:<.*>)*
出现
>
匹配任何不是>
的字符
url然后匹配(?:<.*>)
,然后尝试匹配0或更多(全部
可选)使用此([^<]*)
<.*$
此群组实际上将您的字符串捕获到第1组
Not Registered
与该行的其余部分匹配
答案 1 :(得分:1)
我在python中展示过。但我相信,正则表达式在Java中是相同的。使用Java函数查找匹配项。
import re
reg = r"<a href=.*?municipalite.*?>(.+?)</a>"
result = re.findall(html)
答案 2 :(得分:1)
尝试".*\\bhref=\"repertoire-des-municipalites/fiche/municipalite/\\d+/\"[^>]*>([^<]*)<.*"
我的演示代码(如下)提供了控制台输出:
控制台输出
Amos
Angliers
Authier
演示代码
public class HrefRegex
{
public static void main(final String[] args)
{
final String[] sampleLines = new String[] {
" </tr>",
" <td style=\"width: 14%;\">88055</td>",
" <td style=\"width: 19%;\" class=\"gris\">Ville</td>",
" <td style=\"width: 33%;\"><a href=\"repertoire-des-municipalites/fiche/municipalite/88055/\" >Amos</a></td>",
" <td style=\"width: 34%;\"><a href=\"repertoire-des-municipalites/fiche/mrc/880/\" >Abitibi</a></td>",
" </tr>",
" <tr>",
" <td style=\"width: 14%;\">85080</td>",
" <td style=\"width: 19%;\" class=\"gris\">Village</td>",
" <td style=\"width: 33%;\"><a href=\"repertoire-des-municipalites/fiche/municipalite/85080/\" >Angliers</a></td>",
" <td style=\"width: 34%;\"><a href=\"repertoire-des-municipalites/fiche/mrc/850/\" >Témiscamingue</a></td>",
" </tr>",
" <tr>",
" <td style=\"width: 14%;\">87050</td>",
" <td style=\"width: 19%;\" class=\"gris\">Municipalité</td>",
" <td style=\"width: 33%;\"><a href=\"repertoire-des-municipalites/fiche/municipalite/87050/\" >Authier</a></td>",
" <td style=\"width: 34%;\"><a href=\"repertoire-des-municipalites/fiche/mrc/870/\" >Abitibi-Ouest</a></td>",
" </tr>",
};
final Pattern pattern = Pattern.compile(".*\\bhref=\"repertoire-des-municipalites/fiche/municipalite/\\d+/\"[^>]*>([^<]*)<.*");
for (final String s : sampleLines)
{
final Matcher matcher = pattern.matcher(s);
if (matcher.matches())
{
System.out.println(matcher.group(1));
}
}
}
}