我可以从 XSLT 2.0 文档中看到最好的结果,或者至少从我在这些地方读到的内容中看到:
Saxon 分析字符串函数 http://www.saxonica.com/html/documentation/xsl-elements/analyze-string.html
XML.com http://www.xml.com/pub/a/2003/06/04/tr.html
使用正则表达式从某些输入中提取特定组的唯一方法是使用analyze-string()。相比之下,replace() 函数非常简洁,那么是否有同样简洁的提取方法呢?
例如,给定输入:“ABCD:123,DEFGH”,我想仅提取“123”并将其存储在变量中。请注意,输入可能更复杂,因此我确实想利用正则表达式和分组。
tokenize()
IMO 不是答案,因为它似乎更适合输入具有重复分隔符的情况。
我正在寻找一个简洁的函数replace()
并且可能像这样工作:
<xsl:variable name="num" select="extract('.', '(.+):\s*(\d+), (.+)', '$2')"/>
但我找不到。看来我必须像下面那样使用analyze-string(),但它太长了:
<xsl:variable name="num">
<xsl:analyze-string select="." regex="(.+):\s*(\d+), (.+)">
<xsl:matching-substring>
<xsl:value-of select="regex-group(2)"/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
是否真的有必要使用analyze-string()
或者我错过了什么?