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

如何使用regex-applicative库移除字符串指定后缀?

用regex-applicative库仅移除字符串结尾的指定后缀

你的问题出在之前的正则模式没有限制.end必须出现在字符串末尾——some anySym <* ".end"会匹配任何后面跟着.end的字符序列,哪怕.end后面还有其他内容。

要实现仅移除结尾.end的需求,你需要用end组合子来明确匹配输入的结束位置,确保.end之后没有多余字符。

正确代码

import Text.Regex.Applicative

removeEndSuffix :: String -> String
removeEndSuffix = replace (many anySym <* string ".end" <* end)

代码说明

  • many anySym:匹配任意数量(包括0个)的任意字符,对应.end之前的部分
  • <* string ".end":确保前面的字符序列后紧跟字面量.end
  • <* end:强制匹配到输入的结束位置,保证.end是字符串的最后一部分
  • replace函数会将整个匹配到的字符串(前缀+.end)替换为many anySym捕获的前缀;如果字符串不以.end结尾,正则模式不匹配,replace会直接返回原字符串

测试效果:

  • 输入"start.end" → 返回"start"
  • 输入"start.end.extra" → 返回原字符串"start.end.extra"
  • 输入".end" → 返回空字符串
  • 输入"test" → 返回原字符串"test"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:18