如何提取忽略 及部分HTML标签的Java子字符串
Java提取含HTML标签和换行符字符串中的目标子串
下面提供几种实用的Java实现方式,按需选择:
方法1:先清理干扰内容,再查找目标
先把所有HTML标签、换行符这类干扰内容移除,得到纯文本后直接查找目标字符串,适合目标子串在纯文本中是连续的情况。
public class TargetExtractor { public static void main(String[] args) { // 示例原始字符串 String rawContent = "<div class=\"bank-name\">\nHDFC</a> Bank</td>"; String target = "HDFC Bank"; // 移除所有HTML标签 String noTags = rawContent.replaceAll("<[^>]+>", ""); // 移除换行符并去除首尾空白 String cleanedText = noTags.replaceAll("\\n", "").trim(); if (cleanedText.contains(target)) { System.out.println("提取到目标:" + target); } else { System.out.println("未找到目标子串"); } } }
replaceAll("<[^>]+>", ""):通过正则匹配并移除所有HTML标签(匹配以<开头、>结尾的任意内容)replaceAll("\\n", ""):移除换行符,trim()用来去掉首尾多余空白
方法2:正则直接匹配拆分的目标子串
如果目标子串被HTML标签或换行拆分(比如HDFC和Bank之间插了标签),可以用正则允许中间存在任意干扰内容,直接匹配目标。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class TargetExtractor { public static void main(String[] args) { String rawContent = "<a href=\"#\">HDFC</a>\n<div>Bank</td>"; // 正则:匹配HDFC和Bank之间允许任意空白、标签等干扰内容 String regex = "HDFC\\s*(?:<[^>]+>|\\s)*Bank"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(rawContent); if (matcher.find()) { System.out.println("提取到目标:HDFC Bank"); // 若需要获取实际匹配的内容(包含中间干扰),可以用matcher.group() // System.out.println("匹配到的完整内容:" + matcher.group()); } else { System.out.println("未找到目标子串"); } } }
\\s*:匹配任意数量的空白(包括换行、空格)(?:<[^>]+>|\\s)*:非捕获组,匹配任意数量的HTML标签或空白,确保HDFC和Bank之间的干扰都被忽略
方法3:用HTML解析库处理复杂HTML
如果原始内容是完整的HTML文档,用专业的HTML解析库(比如Jsoup)更稳定,避免正则处理复杂HTML时的漏洞。
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class TargetExtractor { public static void main(String[] args) { String rawHtml = "<table><tr><td><span class=\"name\">HDFC</span> Bank</td></tr></table>"; // 解析HTML文档 Document doc = Jsoup.parse(rawHtml); // 获取所有纯文本内容,自动移除标签和格式 String plainText = doc.text(); String target = "HDFC Bank"; if (plainText.contains(target)) { System.out.println("提取到目标:" + target); } else { System.out.println("未找到目标子串"); } } }
- 注意:使用Jsoup需要在项目中引入依赖(Maven可添加Jsoup的依赖坐标)
- Jsoup的
text()方法会自动合并HTML中的所有文本,忽略标签、换行和格式,处理复杂HTML更可靠
内容的提问来源于stack exchange,提问作者vikramvi
相关产品推荐
相关产品推荐

