我正在尝试使用XSLT将XML转换为平面文本。其中一个节点具有以下内容,我需要提取文本“失败”之前出现的字符串 我打算使用analyze-string函数,并且无法为它创建正则表达式。我试图看看我是否可以使用前瞻模式,但无法这样做。
在文本“失败”之前,有人能说出在方括号内提取文本的正则表达式:
文本
[[2500, 4500]] fail(expected [[2100, 3000, 4000, 5000, 5400, 6000, 8000, 10000]])
最终输出
[2500, 4500]
答案 0 :(得分:2)
/\[(\[.+?\])\] fail/
并获取$1
。
答案 1 :(得分:1)
即使在没有正则表达式的XSLT 1.0(作为单个XPath 1.0表达式)中也可以这样做:
substring(substring(normalize-space(substring-before(.,' fail')), 2),
1,
string-length(substring(
normalize-space(substring-before(.,' fail')),
2)
) -1
)
因为您的目标是在XSLT中执行此操作,您可以为此复杂表达式的组件定义变量,并获得一个简单且易于理解的代码:
<xsl:template match="/">
<xsl:variable name="vStart" select=
"normalize-space(substring-before(.,' fail'))"/>
<xsl:variable name="vnormString" select=
"normalize-space($vStart)"/>
<xsl:variable name="vLen" select="string-length($vnormString)"/>
"<xsl:value-of select="substring($vnormString, 2, $vLen -2)"/>"
</xsl:template>
</xsl:stylesheet>
对以下XML文档应用此转换时:
<t>[[2500, 4500]] fail(expected [[2100, 3000, 4000, 5000, 5400, 6000, 8000, 10000]]) </t>
产生了想要的正确结果:
"[2500, 4500]"
解释:使用标准XPath 1.0函数:substring()
,substring-before()
,normalize-space()
和string-length()