如何在<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
相关产品推荐
相关产品推荐

