如何在 fn:tokenize 中跳过相同值的拆分模式的拆分功能



我正在尝试拆分一个字符串(用"|"或","分隔的分隔字符串(。我使用 fn:tokenize 来实现这一点。考虑下面的示例文本,其中我有 4 列文本,其中第 3 列我获得了与拆分模式相同的值。

fn:tokenize("column1|column2|||column4", "|")

上述代码的结果给了我 5 个值,其中 2 个为空:

column1
column2

column4

我还尝试在 column3 值中添加引号,这也没有给我预期的结果。

在 MarkLogic 9 中,您可以定义自己的自定义分词器。

除了通过正则表达式fn:tokenize拆分并因此需要转义|之外,这似乎是一种可怕的数据格式。将 Michael Kay 指出的问题分开,并期望||始终指示以 | 开头的新字段,并且永远不会有空列,您可以应用一个简单的技巧并将管道符号替换为另一个字符,然后转换回来。但是,这要求您在 Unicode 范围内找到数据集中不允许的某些字符。

for $token in fn:tokenize(fn:replace("column1|||||column4", "||", "|_"), "|")
return fn:replace($token, "_", "|")

结果:

column1
|
|
column4

如果我所做的假设不适用于您的用例,则必须确定另一组类似的严格假设才能解析您的内容。

最新更新