删除两个特定标记之间的所有字符(java regex)

时间:2014-07-16 15:26:49

标签: java regex string

我想删除html内容和标签

<DATE> html content </DATE>

这些是我尝试过的代码的不同版本,但没有一个有效:

content = content.replaceAll("<DATE>(?s:)</DATE>", "");
content = content.replaceAll("<DATE>(?:.|\n)</DATE>", "");
content = content.replaceAll("<DATE>" + Pattern.DOTALL + "</DATE>", "");
content = content.replaceAll("<DATE>(.*?)</DATE>", "");

有什么建议吗?

完整代码:

Path corpusPath = Paths.get(path + file);
String content = new String(Files.readAllBytes(corpusPath), charset);
content = content.replaceAll("<HEADLINE>", "<DOCHDR>");
content = content.replaceAll("</HEADLINE>", "</DOCHDR>");
content = content.replaceAll("<DATE>(.*?)</DATE>", "");
Path destPath = Paths.get(path + "Parsed\\" +file);
Files.write(destPath, content.getBytes(charset));

1 个答案:

答案 0 :(得分:10)

尝试使用以下正则表达式删除<DATE>标记及其内容

content = content.replaceAll("(?s)<DATE>.*?</DATE>", "");

<强>解释

  • (?s) DOTALL Modifier启用DOTALL模式。它使得点甚至可以匹配换行符。
  • <DATE>匹配起始<DATE>代码。
  • .*?匹配任何字符到下一个</DATE>字符串。在?告诉正则表达式引擎进行最短匹配后*
  • 最后匹配的字符将替换为空字符串。