[英]How to Extract data from HTML page using regex pattern in java
我正在嘗試從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();
PS:我知道最好的方法是改用HTML解析器,但是我真的被迫采用這種方式
非常感謝,
低音
您可以使用類似這樣的方法來硬編碼匹配具有municipalite
的網址,並將wrt中的文本獲取為>
和<
字符。
這是我的數據文件:
<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>
這是Java文件:
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();
}
}
輸出:
$ javac test.java
$ java test
Amos
Angliers
Authier
$
正則表達式細分:
href\\s*=\\s*(?:\"|').*municipalite/[^>]*>(?:<.*>)*([^<]*)<.*$
href\\\\s*=\\\\s*
匹配href,后跟0或多個空格,后跟=
,然后是0或多個空格
(?:\\"|')
-> (?:)
表示非捕獲組,即它匹配單引號或雙引號,但不捕獲/記住它
.*municipalite/
匹配任何字符,直到municipalite/
出現
[^>]*>(?:<.*>)*
匹配URL其余部分中不是>
任何字符,然后匹配>
,然后嘗試將0個或多個(所有可選)打開標記匹配為一個非使用此捕獲組(?:<.*>)
([^<]*)
該組實際上將您的字符串捕獲到組1中
<.*$
與行的其余部分匹配
我已經在python中顯示了。 但是,我相信Java中的正則表達式是相同的。 使用Java函數查找匹配項。
import re
reg = r"<a href=.*?municipalite.*?>(.+?)</a>"
result = re.findall(html)
嘗試".*\\\\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));
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.