我收到一段HTML文档作为Java String,我想提取它的内部文本。 例如:你好世界 ---->你好世界
有没有办法使用java标准库提取文本? 有些东西可能比打开/关闭标签正则表达式更有效吗? 感谢,
答案 0 :(得分:2)
不要使用正则表达式来解析HTML,而是使用像HtmlCleaner这样的专用解析器。
使用正则表达式通常会在第一次测试时起作用,然后开始越来越复杂,直到它无法适应为止。
答案 1 :(得分:2)
Don't use regular expression to parse HTML,例如jsoup: Java HTML Parser。它有一种从DOM中选择元素的便捷方式。
示例强> 获取Wikipedia主页,将其解析为DOM,并从“新闻”部分中选择元素列表中的标题:
Document doc = Jsoup.connect("http://en.wikipedia.org/").get(); Elements newsHeadlines = doc.select("#mp-itn b a");
JDK中还有一个HTML解析器:javax.swing.text.html.parser.Parser,可以像这样应用:
Reader in = new InputStreamReader(new URL(webpageURL).openConnection().getInputStream());
ParserDelegator parserDelegator = new ParserDelegator();
parserDelegator.parse(in, harvester, true);
然后,取决于您要查找的类型:开始标记,结束标记,属性等,您定义适当的回调函数:
@Override
public void handleStartTag(HTML.Tag tag,
MutableAttributeSet mutableAttributeSet, int pos) {
// parses the HTML document until a <a> or <area> tag is found
if (tag == HTML.Tag.A || tag == HTML.Tag.AREA) {
// reading the href attribute of the tag
String address = (String) mutableAttributeSet
.getAttribute(Attribute.HREF);
/* ... */
答案 2 :(得分:2)
我也会说 - 不要在HTML中使用正则表达式。 ; - )
您可以使用JTidy进行拍摄。
答案 3 :(得分:1)
您可以使用HTMLParser,这是一个开源。