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

Scala中replaceAll处理末尾带换行符字符串的正则异常咨询

正则替换问题分析与解决

先看两段Scala代码的执行结果:

scala> "foo\nbar".replaceAll("\n[^\n]+$", "#")
val res78: String = foo# // <- 符合预期
scala> "foo\nbar\n".replaceAll("\n[^\n]+$", "#")
val res77: String = "foo# // <- 不符合预期
"

问题原因

你的推测完全正确:正则里的$默认会匹配字符串末尾换行符之前的位置。当字符串以\n结尾时,$的位置落在最后那个换行符前面,此时正则\n[^\n]+$会匹配从倒数第二个\n开始、到$(最后一个\n之前)的内容——也就是\nbar,替换成#后,原本末尾的\n没被匹配到,自然就保留了下来。

解决方案

把正则里的$换成\z即可。\z是正则的绝对结束锚点,只会匹配整个字符串的最后位置,不会忽略末尾的换行符。修改后的代码执行结果如下:

scala> "foo\nbar\n".replaceAll("\n[^\n]+\\z", "#")
val res79: String = foo#

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:32:40