2010-03-06 16 views
2

我需要找到一個正則表達式,它從html文檔中的表格單元格中提取一個值。正則表達式在網頁中查找值

此表單元格的示例內容爲「結果:40分鐘」。

我需要一個正則表達式來匹配實際的數字(40)。

這是在java中,在此先感謝。

+2

這是太少的信息來建立任何種類的匹配規則。在大多數情況下,最好使用DOM解析器而不是正則表達式。 – 2010-03-06 16:31:19

+0

我想刮這個頁面http://www.metazone.co.uk/tubemap/undergroundmap.php?st1=Acton%20Town&st2=Amersham – user169743 2010-03-06 16:38:34

回答

2

我試圖用正則表達式來做到這一點,它是一個痛苦的洞。

使用類似於XPath表達式的東西要容易得多,您可以通過它在DOM層次結構中的位置來指定位置。 Apache庫可以做到這一點(特別是Xalan),你可以在這裏找到:http://xml.apache.org/xalan-j/

你可以使用Firefox插件XPath Checker來幫你解決這個問題。

順便說一下,如果您正在尋找其他工具/信息,您所談論的區域就稱爲「網頁抓取」。

0

您想使用DOM/XPATH,但如果你真的需要的正則表達式簡單的情況下,再次嘗試

/\<\s*td[^\>]*\>\s*result: (\d+) mins\s*\<\/td\>/i 

,將可能對大多數HTML工作,但正則表達式不會爲所有的HTML工作。

0

如果不是一次性情況,請使用XPath檢索某個HTML元素的內容(「結果:40分鐘」),然後使用一個簡單的正則表達式來獲取所需內容:"result: (\d+) mins"(以適應OverClocked寫入的內容)。如果HTML(很可能)不正確,則可以使用類似JTidy的東西來清理它。

在最簡單的情況下,你可以簡單地尋找在整個頁面的表達:".*result: (\d+) mins.*"

順便說一句,你指着網頁不包含任何類型的「結果」:如果你換貨「路由」 ,你應該可以這樣做:

String pageContent = ... 
Pattern p = java.util.regex.Pattern.compile("Route: ((\\d*) hour)*(\\d*) mins"); 
Matcher m = p.matcher(pageContent); 
m.find(); 
System.out.println(m.group{1}); 
System.out.println(m.group{2}); 
相關問題