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

如何用TCL移除字符串末尾的版本号(如_v01、_v002等)

TCL移除文件名末尾的版本号

要移除文件名末尾_v后跟任意数字(含前导零)的版本号,用**正则表达式匹配+regsub**是最准确的方式——trimright是按字符集合删除,无法识别完整的版本号模式,所以会出现误删或删不干净的问题。

基础方案(无扩展名的文件名)

直接匹配文件名末尾的_v+数字序列,替换为空即可:

# 测试示例文件名
set test_files {note_v01 memo_v002 pic_v1 log_v02 archive_v020}

foreach fname $test_files {
    # 正则:匹配末尾的_v + 一个或多个数字
    regsub {_v\d+$} $fname "" cleaned
    puts "$fname → $cleaned"
}

运行结果:

note_v01 → note
memo_v002 → memo
pic_v1 → pic
log_v02 → log
archive_v020 → archive

正则说明:

  • _v:精确匹配下划线加小写v
  • \d+:匹配1个或多个数字(0-9)
  • $:锚定到字符串末尾,确保只删除最后的版本号,不会误删文件名中间的类似字符

带扩展名的文件名适配

如果文件名包含扩展名(如report_v03.pdf),调整正则即可保留扩展名:

set fname "report_v03.pdf"
# 正向预查:匹配_v+数字,后面要么是扩展名要么是字符串结尾
regsub {_v\d+(?=\.[^.]+$|$)} $fname "" cleaned
puts $cleaned ;# 输出 report.pdf

正则里的(?=\.[^.]+$|$)是正向预查,意思是:当前位置后面要么是.+扩展名(非.的字符到结尾),要么就是字符串结尾,这样就能正确跳过扩展名,只删除前面的版本号。

额外兼容场景

  • 如果版本号的v是大写(如_V01),可以把正则改成_[vV]\d+$来兼容大小写
  • 如果文件名中间有类似_v的字符(如rev_v1_doc_v02),$锚定末尾的逻辑依然能保证只删除最后的版本号,结果是rev_v1_doc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:16:04