2017-05-16 7 views
0

文字列( '|'または '、'を使用して区切られた区切り文字列)を分割しようとしています。私はこれを実装するためにfn:tokenizeを使いました。下の例では、4列のテキストがあり、3列目にはsplit patternと同じ値があります。fn:tokenizeの分割パターンと同じ値の分割機能をスキップする方法

column1 
column2 


column4 

IもCOLUMN3値に引用符を追加してみました、また、私の期待を与えていない。上記のコードの

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

結果は私の2が空された5つの値を与えています結果。

+0

私には、4本のパイプ記号があるので、上記のように5列の区切り文字列のように見えます。それじゃない? – grtjn

+0

いいえ、4列の文字列です。 3列目では、パイプシンボルを値として取得しました。この3列目で、私はこの問題に直面しています。 – user3463568

+0

元気です。うん、tokenizeで十分ではありません。ビットを噛み砕き、引用符で囲まれた値でパイプシンボルが存在することを予期する再帰的な解決策が必要です。 – grtjn

答えて

0

MarkLogic 9では、独自のカスタムトークナイザを定義できます。

0

fn:tokenizeを除いて正規表現で分割すると、|がエスケープする必要がありますが、これは恐ろしいデータ形式のようです。マイケル・ケイが指摘した問題を解決し、||が常に|で始まる新しいフィールドを示し、空のカラムがないことを期待すると、単純なハックを適用してパイプシンボルを別の文字で置き換えて後で戻すことができます。ただし、Unicodeの範囲内にある文字をデータセットでは使用できない文字にする必要があります。

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

結果:私が作った仮定は、あなたのユースケースには適用されない場合

column1 
| 
| 
column4 

、あなたの内容を解析することができるように同様の厳格な仮定の別のセットを決定する必要があります。

関連する問題