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

如何在<tmpl_var>中用substr等方法提取时间字符串片段?

提取字符串中的时间部分解决方案

嘿,我来帮你搞定这个问题!你之前用substring(xxx.length -5)没生效,大概率是模板引擎的语法细节没抓对——不同模板对字符串操作的方法写法差异不小,下面给你几种靠谱的解决思路:

1. 按空格分割取最后一段(最稳妥通用)

既然你的时间部分是字符串最后一个空格分隔的内容,不管时间是15:00还是09:30,这种方法都能准确拿到,容错性最强:

  • 如果用的是FreeMarker模板:
    <tmpl_var xxx?split(" ")?last>
    
  • 如果是Jinja2(类似Django模板语法):
    {{ xxx.split(' ')|last }}
    
  • 如果是Velocity模板:
    #set($parts = $xxx.split(" "))
    $parts[$parts.length - 1]
    

2. 修正substring的写法(针对固定位置场景)

要是你确定时间总是在字符串最后5位,那得用对应模板引擎的正确substring语法:

  • FreeMarker:要通过?来调用方法,最后5位的起始索引是xxx?length -5,写法如下:
    <tmpl_var xxx?substring(xxx?length - 5)>
    
    你之前没加?调用length,这很可能就是失效的原因!
  • Velocity:length是方法要加(),写法:
    $xxx.substring($xxx.length() - 5)
    
  • Thymeleaf:
    <span th:text="${xxx.substring(xxx.length() - 5)}"></span>
    

3. 正则匹配提取(精准适配时间格式)

如果字符串格式偶尔有小变动,但时间始终是HH:MM的格式,用正则匹配最精准:

  • FreeMarker:
    <tmpl_var xxx?replace(".*(\\d{2}:\\d{2})", "$1")>
    
  • Jinja2:
    {{ xxx|regex_replace('.*(\\d{2}:\\d{2})', '\\1') }}
    

你可以根据自己实际使用的模板引擎选对应的方法,优先推荐第一种按空格分割的方式,不依赖固定字符长度,适用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:09:25