【问题标题】:Regex to get text from html tags (nested) - Java正则表达式从 html 标签中获取文本(嵌套) - Java
【发布时间】:2016-01-02 23:26:57
【问题描述】:

使用正则表达式,我希望能够获取多个 html 标签之间的文本。 这里的 HTML 只是为了表示输入,我不担心 HTML 标签,只想检索 HTML 标签中的内容(在正确的打开和关闭标签之间)。 例如,以下内容:

必填项:

<h1>Text 1</h1>
<h1><h2>Text 2</h2></h1>
<h1><h2>Text 3</h2>Xtra</h1>
<h1>Text 4<h1>extra</h1515></h1>
<h1><h1></h1></h1>

所需输出:

Text 1
Text 2
Text 3
None
None

获得的输出:

Text 1
Text 2
Text 3
Text 4<h1>extra</h1515>
<h1></h1>

我试过的正则表达式:

"<([\\S ]+)>([\\S ]+)</\\1>"

我没有得到预期的结果。

我的java代码:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution{
   public static void main(String[] args){

      Scanner in = new Scanner(System.in);
      int testCases = Integer.parseInt(in.nextLine());
      while(testCases>0){
         String line = in.nextLine();
         String tmp = line;
          Pattern r = Pattern.compile("<([\\S ]+)>([\\S ]+)</\\1>", Pattern.MULTILINE);
         Matcher m = r.matcher(line);
         while(m.find()){
             line = line.replaceAll(line, m.group(2));
             m = r.matcher(line);
         }
         if(line != tmp)
             System.out.println(line);
          else
              System.out.println("None");
         testCases--;
      }
   }
}

【问题讨论】:

标签: java regex


【解决方案1】:

正如 cmets 所指出的那样,这种方式除了痛苦之外什么都没有。对于您尝试做的事情,最好使用 jsoup 之类的东西遍历 DOM(文档对象模型)。

【讨论】: