1

我有这个字符串 ($str) : 67-89-90T,我想保留67-89.

当然substring-before($str,'-')return 67,但我该如何选择第二个破折号?

4

3 回答 3

2

XPath 2 解决方案是:

replace("67-89-90T", "(.*)-[^-]*$", "$1")

(也可以,如果没有 -,那么它不匹配并且什么都不替换)

于 2012-12-24T22:37:59.347 回答
1

使用标记化的 XPath 2.0 解决方案可能比使用 RegEx 更易读和易懂:

string-join(tokenize(concat($vStr,'-'), '-')
                                     [.][not(position() eq last())], 
            '-')

当使用 XQuery 处理器或 XPath 2.0 处理器运行时,表达式:

string-join(tokenize(concat('-', '67-89-90T','-'), '-')
                                     [.][not(position() eq last())], 
            '-')

产生想要的正确结果:

67-89
于 2012-12-24T23:59:02.520 回答
0

好的,我终于找到了functx:substring-before-last。不选择特定的破折号,但在这种情况下对我有用。

http://www.xqueryfunctions.com/xq/functx_substring-before-last.html

于 2012-12-24T22:05:31.807 回答