0

我是一个 XSLT 新手,想用正则表达式来匹配这个模式。

“字符串 1-数字-字符串 2”

我需要在第二个连字符之前捕获子字符串。

感谢你的帮助。

谢谢

4

3 回答 3

0

您可以使用replace()正则表达式^([^-]+-[^-]+).*

例子...

XML

<test>String1-number-String2</test>

XSLT 2.0

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/*">
        <results>
            <xsl:value-of select="replace(.,'^([^-]+-[^-]+).*','$1')"/>         
        </results>
    </xsl:template>

</xsl:stylesheet>

输出

<results>String1-number</results>
于 2013-07-16T19:20:26.080 回答
0

这是适用于“String1-number-String2”示例的 XPath 1.0/2.0 字符串函数解决方案(不是正则表达式):

<xsl:value-of select="substring-before(substring-after('String1-number-String2','-'), '-')"/>

- -编辑 - -

我好像误会了。该字符串函数将返回'number',而不是'String1-number'。

这是一个返回“String1-number”的 XPath 2.0 解决方案:

<xsl:variable name="substrings" select="tokenize('String1-number-String2','-')"/>
<xsl:value-of select="concat($substrings[1], '-', $substrings[2])"/>
于 2013-07-17T15:45:45.160 回答
0

您可以使用例如替换功能:

<!-- this will return "number" -->
<xsl:value-of select="replace('String1-number-String2', '(.*)-(.*)-(.*)', '$2')" />

<!-- this will return "String1-number" -->
<xsl:value-of select="replace('String1-number-String2', '(.*)-(.*)-(.*)', '$1-$2')" />
<xsl:value-of select="replace('String1-number-String2', '(.*-.*)-(.*)', '$1')" />
于 2013-07-16T19:12:29.973 回答