正则表达式在标签之间获取文本

时间:2016-12-07 12:39:53

标签: java

我尝试在JAVA中的标记之间获取文本。

`

LocalDateTime localUserOriginalStartDate = new LocalDateTime(shiftStartEndDuration.getStart());
DateTime userOriginalStartDate = localUserOriginalStartDate.plusDays(1).toDateTime();

`

我想使用正则表达式来提取“HELLO TOTO”而不是“功能:”

我已经尝试过这样的事情了

`

<td colspan="2" style="font-weight:bold;">HELLO TOTO</td>
 <td>Function :</td>

`

但结果与输入相同。 有什么想法吗?

我也尝试了这个正则表达式String btwTags = "<td colspan=\"2\" style=\"font-weight:bold;\">HELLO TOTO</td>\n" + "<td>Function :</td>"; Pattern pattern = Pattern.compile("<td(.*?)>(.*?)</td>"); Matcher matcher = pattern.matcher(btwTags); while (matcher.find()) { String group = matcher.group(); System.out.println(group); } ,但它只捕获“功能:” 我不知道在开放(?<=<td>)(.*?)(?=</td>)

之后他可以说是什么

已提前感谢

3 个答案:

答案 0 :(得分:1)

不要使用RegEx解析HTML,这是一个非常糟糕的想法......

知道查看此链接的原因: RegEx match open tags except XHTML self-contained tags

您可以使用Jsoup 来实现此目标:

String html; // your html code
Document doc = Jsoup.parse(html);
System.out.println(doc.select("td[colspan=2]").text());

答案 1 :(得分:0)

您可以使用Regex进行非常基本的HTML解析。这是我能找到的最简单的Java正则表达式:

"(?i)<td[^>]+>([^<]+)<\\/td>"

它将第一个td标记与属性和值匹配。 "HELLO TOTO"位于第1组。

这是一个example

对于更复杂的东西,像Jsoup这样的解析器会更好。 但是,如果HTML无效或者您编写代码的结构已经更改,即使解析器也可能失败。

答案 2 :(得分:-1)

我提供的解决方案没有使用 REGEX 希望会有所帮助..

public class Solution{
  public static void main(String ...args){
    String str = "<td colspan=\"2\" style=\"font-weight:bold;\">HELLO TOTO</td><td>Function :</td>";
    String [] garray = str.split(">|</td>");
    for(int i = 1;i < garray.length;i+=2){
      System.out.println(garray[i]);
    }
  }
}


Output :: HELLO TOTO             
          Function :

我只是使用split函数来分隔给定的子串.Regex很慢并经常混淆。

欢呼快乐的编码...