我有这个字符串($ str):67-89-90T
,我想保留67-89
。
当然substring-before($str,'-')
会返回67
,但我该如何选择第二个破折号?
答案 0 :(得分:2)
XPath 2解决方案将是:
replace("67-89-90T", "(.*)-[^-]*$", "$1")
(也有效,如果没有 - ,从那时起它不匹配并且不替换任何东西)
答案 1 :(得分: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
答案 2 :(得分:0)
好的,我终于找到了functx:substring-before-last
。在这种情况下,不会选择特定的破折号但对我有用。
http://www.xqueryfunctions.com/xq/functx_substring-before-last.html