好一个!尽管我会重构该正则表达式以避免不必要地使用否定逻辑,但我没有找到一种显着改进该正则表达式的方法:
".(?=.{N})|.(?=.*(?<=(.{N})))"
这样,直到输入最后 N个 字符时,才输入第二种替代方法,我认为这使意图更清晰了。
我从未见过参考文献说可以嵌套环顾四周,但是像Bart一样,我也不知道为什么不这样做。有时,我会在lookbehinds内部使用先行方式来绕过可变长度lookbehind表达式的限制。
编辑: 我刚刚意识到我可以通过将替换放在lookahead中来简化正则表达式:
".(?=.{N}|.*(?<=(.{N})))"
顺便说一句,您是否考虑过使用
format()而不是构建正则表达式
replace()?
return str.replaceAll( String.format(".(?=.{%1$d}|.*(?<=(.{%1$d})))", N), "");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)