【问题标题】:How can I filter html file content with java regular expressions?如何使用 java 正则表达式过滤 html 文件内容?
【发布时间】:2015-01-14 08:31:37
【问题描述】:

用java我可以下载一个网页到txt文件中。现在我想通过正则表达式从这个txt文件中读取值。下面是真实html的一小部分。

<div>
   <input id="_NAME" value="/John/" />
   <input id="_LASTNAME" value="/BOND/"/>
   <input id="_Class"   value="5" />
</div>

我只想根据 id(_Name 和 _LASTNAME)读取值? 提前致谢

【问题讨论】:

  • 我使用 XML 解析器,但网站结构设计得很糟糕
  • 使用 HTML 解析器,例如汤。只要您想要的部分看起来和上面显示的一样好(并且标记括号 &lt;&gt; 正确关闭),它就应该是可解析的。
  • 我写的部分是可解析的,但是网页结构不好

标签: java regex xml


【解决方案1】:

只要 HTML 文件在浏览时可用,它应该可以被 Jsoup 解析。由于您只查询 input 元素的属性,因此您不必担心生成的 DOM 的结构。

示例代码,使用您的 HTML 示例,前面有一堆错误的 HTML 标记:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class SO27938637 {
    public static void main(String[] args) {
        Document doc = Jsoup.parse("<div><span><div><b>sdf</span>dsf<i>sdfdsfsdfds<span></div><div>\n    <input id=\"_NAME\" value=\"/John/\" />\n   <input id=\"_LASTNAME\" value=\"/BOND/\"/>\n   <input id=\"_Class\"   value=\"5\" /></div>");
        Elements inputElement = doc.select("input");

        for (Element e: inputElement) {
            System.out.println(e.attr("id") + ": " + e.attr("value"));
        }
    }
}

输出:

_NAME: /John/
_LASTNAME: /BOND/
_Class: 5

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2014-08-17
    相关资源
    最近更新 更多