我的内容包含HTML:<span title="whatever">something I want to preserve</span>...
我正在使用正则表达式将<span title="whatever">
替换为(
,然后将以下</span>
替换为)
Pattern regex = Pattern.compile("<span\\s+[^>]*title=(['\"])(.*?)\\1[^>]*>");
Matcher matcher = regex.matcher(strLine);
if (matcher.find()) {
strLine = matcher.replaceAll("(");
strLine = strLine.replace("</span>", ")");
}
我的作品,但它取代了所有</span>
标签;我只想替换与我刚匹配的开头标签相匹配的那个。
答案 0 :(得分:6)
为什么不在一个replaceAll(...)
电话中执行此操作:
String s = "noise <span title=\"whatever\">something I want to preserve</span>...";
s = s.replaceAll("<span\\s+[^>]*title=(['\"])(.*?)\\1[^>]*>(.*?)</span>", "($3)");
System.out.println(s);
将打印:
noise (something I want to preserve)...
请注意Alan在我的回答中的评论:这假设您的输入中没有嵌套的<span>
。
答案 1 :(得分:3)
我建议您使用单个正则表达式来匹配整个<span ...>...</span>
。捕获一个组中的<span>
和另一个组中的</span>
,并使用捕获组进行替换。
答案 2 :(得分:1)
您可以尝试提取<span>
标记的内容,然后用大括号包装,而不是替换<span>
标记。