XQuery-如何在第二次出现字符之前提取子字符串



假设我有一个字符串:"123_12345_123456";

我想在第二个"_"(下划线(

我试过了:

fn:tokenize("123_1234_12345", '_')[position() le 2]

返回:

123
1234

我真正想要的是:

123_1234

我该如何做到这一点?

我使用的是XQuery 1.0

正则表达式灵活紧凑:

replace('123_1234_12345', '_[^_]+$', '')

另一个可读性更好的解决方案是:a(将字符串标记化,b(保留要保留的标记,c(再次加入它们:

string-join(
tokenize('123_1234_12345', '_')[position() = 1 to 2],
'_'
)

从Michael Kay删除的答案中获得基本思想,它可以这样实现:

substring($input, 1, index-of(string-to-codepoints($input), 95)[2] - 1)

最新更新