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

XSLT中Regex匹配失效求助:正则在Oxygen中可匹配但XSLT中无效

问题原因与解决办法

核心原因

你在XSLT正则中使用"是错误的——XML解析器处理文档时,会把"实体还原为实际的双引号字符,而xsl:analyze-string处理的是节点解析后的文本值,不是原始的XML源码字符串。所以正则应该匹配双引号本身,而非"这个实体字符串。

修正正则的两种方式

在XSLT中,正则表达式写在属性里时,需注意双引号的转义规则:

  1. 如果属性值用双引号包裹,正则里的双引号要转义为":
    <xsl:analyze-string select="your-target-node" regex="(^&quot;\w+&quot;,\s)(\d+\.\d+,)">
      <xsl:matching-substring>
        <!-- 提取第二个分组的数值 -->
        <xsl:value-of select="regex-group(2)"/>
      </xsl:matching-substring>
    </xsl:analyze-string>
    
  2. 如果属性值用单引号包裹,正则里可以直接写双引号,无需转义:
    <xsl:analyze-string select="your-target-node" regex='(^"\w+",\s)(\d+\.\d+,)'>
      <xsl:matching-substring>
        <xsl:value-of select="regex-group(2)"/>
      </xsl:matching-substring>
    </xsl:analyze-string>
    

额外注意点

  • 正则中的^锚点表示匹配文本的开头,如果目标文本节点中,引号包裹的单词并非位于文本最开始(比如前面有空白或其他字符),需要去掉^或者添加\s*匹配前置空白,比如(\s*&quot;\w+&quot;,\s)。
  • 确保\w能覆盖你的单词范围:XSLT正则中的\w匹配Unicode字母、数字和下划线,如果单词包含连字符等特殊字符,需要调整为[a-zA-Z0-9-]+这类更精准的表达式。

内容的提问来源于stack exchange,提问作者l.surname

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:35:41