正则表达式XSLT,提取匹配

时间:2013-05-07 15:15:06

标签: regex xslt

我正在使用XSLT 2.0并试图提取所需的caracterer正则表达式。

我用tokenize()试了一下,但更令人费解。

  <xsl:value-of select="tokenize('2.0-Cloverleaf-3d', '-')" />

结果是: 2.0 ,结果应该是: 3 。字符串是(2.0-Cloverleaf - * 3 * d)。

我更喜欢这样做:

  <xsl:if test="matches(x:td/x:p, '.+3d$')">
    true
  </xsl:if>

是否有任何功能可以获得您需要的角色,而无需“if”?感谢。

修改

我想我会这样离开。

<xsl:variable name="places">
  <xsl:if test="matches(x:td/x:p, '.+3d$')">3</xsl:if>
  <xsl:if test="matches(x:td/x:p, '.+4d$')">4</xsl:if>
  <xsl:if test="matches(x:td/x:p, '.+5d$')">5</xsl:if>
</xsl:variable>

但如果有更好的方法可以做到这一点。谢谢。

2 个答案:

答案 0 :(得分:4)

您可以使用替换,用您需要的部件替换所有部件。

在XPath 2中:

replace(x:td/x:p, '^.*([0-9])d$', '$1')

在XSL中:

<xsl:value-of select="replace(x:td/x:p, '^.*([0-9])d$', '$1')" /> 

答案 1 :(得分:0)

您可以使用tokenize()执行此操作,但首先将令牌收集到变量中。

<xsl:variable name="tokens" select="tokenize(x:td/x:p,'-')"/>

然后选择最后一个标记并使用substring()来获取数字。

<xsl:value-of select="substring(item-at($tokens, 3), 1, 1)" />