【问题标题】:Stripping HTML in Java在 Java 中剥离 HTML
【发布时间】:2014-06-26 15:44:18
【问题描述】:

我有数百个格式完全相同的 HTML 文件(Pidgin IM 日志文件):

<html>
    <head><meta ...><title>...</title></head>
    <body>
        <h3>...</h3>
        <font color=...><font ...>(TIME)</font> <b>(NAME):</b></font> (MESSAGE)<br/>
        <font color=...><font ...>(TIME)</font> <b>(NAME):</b></font> (MESSAGE)<br/>
        <font color=...><font ...>(TIME)</font> <b>(NAME):</b></font> (MESSAGE)<br/>
        ...

(没有结束 body/html 标签,它只是重复这些行直到 EOF)

我需要从这些文件中提取时间、姓名和消息。我对正则表达式不是很好,我尝试过的 HTML 库对于我正在尝试做的事情似乎有点复杂。有什么建议吗?

【问题讨论】:

标签: java html regex


【解决方案1】:

如果这是一个特定的需求,并且格式确实是常规的,我会使用简单的indexOf

String[] lines=readFile(...);
for(String lin: lines) {
    int str,end;
    if((str=lin.indexOf("<font "     ))!=-1 
    && (str=lin.indexOf("<font " ,str))!=-1 
    && (str=lin.indexOf(">"      ,str))!=-1 
    && (end=lin.indexOf("</font>",str))!=-1) {
        str++;
        time=lin.substring(str,end);

        if((str=lin.indexOf("<b>"  ,end))!=-1) {
        && (end=lin.indexOf(":</b>",str))!=-1) {
            str+=3;
            name=lin.substring(str,end);

            if(... and so on
            }
        }
    }

(注意这段代码是即兴的,未经编译和测试,旨在传达基本思想)

【讨论】:

    【解决方案2】:

    我能够使用正则表达式来解决问题。

    Pattern correct = Pattern.compile("\\<font color=.*?\\>", 0);
    Pattern replace = Pattern.compile("\\</?(font|b|br/)( +.*?)?\\>", 0);
    
    for (String s : Files.readAllLines(myfile)) {
        if (correct.matcher(s).matches() && replace.matcher(s).matches()) {
            String text = replace.matcher(s).replaceAll("");
    
            String time = text.substring(1, text.indexOf(')'));
    
            int offset = text.indexOf(':');
            offset = text.indexOf(':', offset + 1);
            int result = text.indexOf(':', offset + 1);
    
            String name = text.substring(text.indexOf(')') + 2, result);
            String message = text.substring(result + 2).trim();
    
            // do stuff with time, name and message
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多