我有这个字符串(几乎是无限的):
[e00-100; e01-90; e02-0; e03-0; ...;]
现在,我想要这个结果:
e00-100
e01-90
e02-0
...
字符串完成始终使用;]
如何使用正则表达式(使用函数<xsl:analyze-string select="$string" regex="...">
<xsl:matching-substring>...
)?
谢谢你的帮助!
答案 0 :(得分:2)
如果你使用<xsl:value-of select="tokenize(replace(replace($string, '^\[', ''), ';\]$', ''), ';')" separator=" "/>
,它就足以在每条线上输出令牌。
如果您想按照评论中的说明包装令牌,那么您可以使用
<xsl:for-each select="tokenize(replace(replace($string, '^\[', ''), ';\]$', ''), ';')">
<val><xsl:value-of select="."/></val>
</xsl:for-each>
或analyze-string例如
<xsl:analyze-string select="$string" regex="(e[0-9]+-[0-9]+);">
<xsl:matching-substring>
<val><xsl:value-of select="regex-group(1)"/></val>
</xsl:matching-substring>
</xsl:analyze-string>
这是一个完整的例子:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:param name="string" select="'[e00-100;e01-90;e02-0;e03-0;]'"/>
<xsl:template name="main">
<results>
<result-tokenize>
<xsl:for-each select="tokenize(replace(replace($string, '^\[', ''), ';\]$', ''), ';')">
<val><xsl:value-of select="."/></val>
</xsl:for-each>
</result-tokenize>
<result-as>
<xsl:analyze-string select="$string" regex="(e[0-9]+-[0-9]+);">
<xsl:matching-substring>
<val><xsl:value-of select="regex-group(1)"/></val>
</xsl:matching-substring>
</xsl:analyze-string>
</result-as>
</results>
</xsl:template>
</xsl:stylesheet>
输出(使用Saxon 9.5 HE测试)
<results>
<result-tokenize>
<val>e00-100</val>
<val>e01-90</val>
<val>e02-0</val>
<val>e03-0</val>
</result-tokenize>
<result-as>
<val>e00-100</val>
<val>e01-90</val>
<val>e02-0</val>
<val>e03-0</val>
</result-as>
</results>