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

Freemarker新手求助:提取标签属性值括号内内容的方法

解决Freemarker提取属性字符串中括号内内容的问题

核心问题纠正

你之前提取到标签内的数字(如20595987),是因为直接获取了标签的文本内容。要实现需求,需要先获取alternative-id标签的description属性值,再从中提取括号内的内容。

方法一:字符串截取(适合单对括号场景)

假设你的数据模型中,待处理的标签列表变量名为alternativeIds,可以通过以下代码提取:

逐行输出格式

<#list alternativeIds as id>
  <#assign desc = id.@description>
  <#assign startPos = desc?index_of("(") + 1>
  <#assign endPos = desc?index_of(")")>
  ${desc?substring(startPos, endPos)}
</#list>

逗号分隔输出格式

<#list alternativeIds as id>
  <#assign desc = id.@description>
  <#assign startPos = desc?index_of("(") + 1>
  <#assign endPos = desc?index_of(")")>
  ${desc?substring(startPos, endPos)}<#if id_has_next>,</#if>
</#list>

方法二:正则表达式(灵活适配复杂场景)

如果需要处理更复杂的字符串格式,用正则匹配捕获括号内内容更可靠:

逐行输出格式

<#list alternativeIds as id>
  <#assign desc = id.@description>
  <#-- 匹配括号内内容并替换输出 -->
  ${desc?replace(".*\\((.*?)\\).*", "$1", "r")}
</#list>

逗号分隔输出格式

<#assign result = []>
<#list alternativeIds as id>
  <#assign desc = id.@description>
  <#assign extracted = desc?replace(".*\\((.*?)\\).*", "$1", "r")>
  <#assign result = result + [extracted]>
</#list>
${result?join(",")}

关键说明

  • id.@description是Freemarker中获取XML/HTML标签属性的语法,替换成你实际使用的变量名即可。
  • 正则表达式中\\(和\\)是转义后的括号,(.*?)是非贪婪捕获组,确保只提取一对括号内的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:45:48