您需要创建一个 交替组 出一套用
String.join("|", toDelete)
并用作
line = line.replaceAll("\b(?:"+String.join("|", toDelete)+")\b", "");
图案看起来像
b(?:end|something)b
请参阅regex演示。在这里,
(?:...)是一个 非捕获
组,用于对多个备用方案进行 分组, 而无需为捕获创建内存缓冲区(由于删除了匹配项,因此不需要它)。
或者,最好在进入循环之前编译正则表达式:
Pattern pat = Pattern.compile("\b(?:" + String.join("|", toDelete) + ")\b");... line = pat.matcher(line).replaceAll("");
更新 :
要允许匹配包含特殊字符的整个“单词”,您需要使
Pattern.quote这些单词转义那些特殊字符,然后需要使用明确的单词边界,
(?<!w)而不是使用首字母
b来确保之前没有单词char和
(?!w)否定的提前而不是决赛
b,以确保比赛结束后没有单词char。
在Java 8中,您可以使用以下代码:
Set<String> nToDel = new HashSet<>();nToDel = toDelete.stream() .map(Pattern::quote) .collect(Collectors.toCollection(HashSet::new));String pattern = "(?<!\w)(?:" + String.join("|", nToDel) + ")(?!\w)";
正则表达式看起来像
(?<!w)(?:Q+endE|Qsomething-E)(?!w)。注意的符号
Q和
E被解析
的文字符号 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)