を与える私はいくつかの細胞にGREL式「value.split(/ /)」を適用:Openrefine:正規表現との分割は奇妙な結果に
abcdef -> [ "", "bcdef" ]
bcdefa -> [ "bcdef" ]
badef -> [ "b", "def" ]
最初のセルは私に "を与え、なぜ私が理解できません"要素を作成します。バグですか?
ありがとうございます!
を与える私はいくつかの細胞にGREL式「value.split(/ /)」を適用:Openrefine:正規表現との分割は奇妙な結果に
abcdef -> [ "", "bcdef" ]
bcdefa -> [ "bcdef" ]
badef -> [ "b", "def" ]
最初のセルは私に "を与え、なぜ私が理解できません"要素を作成します。バグですか?
ありがとうございます!
この機能のためにsource codeにコメントするのにJavaを十分に知らないのですが、according to one of the developers of Open Refineこの動作は正常です(編集:Owenのコメントの詳細、下記参照)。これは、文字列を分割する他の関数がある理由です。 sep
が初めにまたは文字列の末尾にあるとき
value.smartSplit(/a/)
は、例えば、より一貫した結果を与える:
row value value.smartSplit(/a/)
1. abcdef [ "", "bcdef" ]
2. bcdefa [ "bcdef", "" ]
3. badef [ "b", "def" ]
これは有効omitfragment = true
オプションでpartition()
を使用した場合と同じ結果であります開発者に転送
row value value.partition(/a/, true)
1. abcdef [ "", "bcdef" ]
2. bcdefa [ "bcdef", "" ]
3. badef [ "b", "def" ]
(REGのEXP付)OpenRefine 'スプリット' 関数は、単にJavaのString」を使用しています分割方法。このメソッドは、 "このパターンと一致する別のサブシーケンスによって終了する入力シーケンスの各部分文字列を含む"配列を生成します。つまり、シーケンスの終結文字として一致したパターンを常に取ります。パターンが文字列の最初の文字と一致する場合、その前の部分文字列は空です。つまり、最初の空の部分文字列です。詳細はhttps://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#split(java.lang.CharSequence,%20int) –
ありがとう!私はvalue.partitionとvalue.smartSplit ... –
これについてもう一度考える... preserveAllTokens = falseでも[""、 "abc"]を持つのは普通ですか? –
質問:https://github.com/OpenRefine/OpenRefine/issues/1255 –