You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lucene/Java中\s*、\s+正则不生效,代码空格无法移除求助

问题:Lucene代码分析器中空白字符正则匹配失效的解决办法

我正在使用Java结合Lucene开发代码分析器,希望移除空白字符以实现代码规范化,但发现\s*和\s+正则表达式无法被识别。

原实现代码

Analyzer ana = CustomAnalyzer.builder(Paths.get("."))
    .addCharFilter("patternreplace","pattern","[{]|[}]|[;]|[,]|[(]|[)]","replacement","")
    .withTokenizer(SimplePatternSplitTokenizerFactory.class,"pattern","[\n]") 
    .addTokenFilter(LowerCaseFilterFactory.class)
    .addTokenFilter("patternreplace","pattern","[jlk][+][+]","replacement","i++")
    .addTokenFilter("patternreplace","pattern","size","replacement","length")
    .addTokenFilter("patternreplace","pattern","[\\s*][jkl][\\s*]","replacement"," i ")
    .addTokenFilter("patternreplace","pattern","[\\s+]","replacement","")
    .build();
return muestraTexto(ana, texto);

测试用例代码

for(int i = 0; i < nada.size(); i++){
    suma = 5 + 3;
}


    for(int j = 0; j < algo.size(); j++){
    suma2 = 5+3;
}

当前输出结果

forint i = 0 i < nada.length i
suma = 5  3

forint j = 0 j < algo.length i
    suma2 = 53

目前空格并未被成功移除,请求解决该问题。


解决办法

问题核心是正则表达式写法错误:方括号[]是字符类,里面的*和+会被当作普通字符处理,而非量词,导致正则完全达不到预期效果。以下是具体修正方案:

1. 修正空白匹配正则

  • 将匹配jkl前后空白的正则[\\s*][jkl][\\s*]改为\\s*[jkl]\\s*:去掉方括号,让*作为量词匹配零个或多个空白字符。
  • 将移除空白的正则[\\s+]改为\\s+:去掉方括号,让+作为量词匹配一个或多个空白字符,替换为空即可移除所有连续空白。

2. 调整Filter顺序(推荐)

把移除空白的Filter放在最后,确保前面所有替换操作引入的空白都能被统一处理。

修正后的完整代码

Analyzer ana = CustomAnalyzer.builder(Paths.get("."))
    .addCharFilter("patternreplace","pattern","[{]|[}]|[;]|[,]|[(]|[)]","replacement","")
    .withTokenizer(SimplePatternSplitTokenizerFactory.class,"pattern","[\n]") 
    .addTokenFilter(LowerCaseFilterFactory.class)
    .addTokenFilter("patternreplace","pattern","[jlk][+][+]","replacement","i++")
    .addTokenFilter("patternreplace","pattern","size","replacement","length")
    .addTokenFilter("patternreplace","pattern","\\s*[jkl]\\s*","replacement"," i ")
    .addTokenFilter("patternreplace","pattern","\\s+","replacement","")
    .build();
return muestraTexto(ana, texto);

修正后预期输出

forinti=0i<nada.lengthi
suma=53

forinti=0i<algo.lengthi
suma2=53

内容的提问来源于stack exchange,提问作者leyva_7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:45:30