2017-09-24 64 views
2

我申請GREL表達「value.split(/ A /)」一些細胞:Openrefine:分裂與正則表達式給出了奇怪的結果

abcdef -> [ "", "bcdef" ] 
bcdefa -> [ "bcdef" ] 
badef -> [ "b", "def" ] 

我不明白爲什麼第一個單元格給了我一個「 「元素在結果表中。這是一個錯誤嗎?

謝謝!

+0

問題轉移到開發商:https://github.com/OpenRefine/OpenRefine/issues/1255 –

回答

1

我不知道Java足以評論source code這個功能,但according to one of the developers of Open Refine這種行爲是正常的(編輯:在下面的歐文的評論中的更多細節)。這就是爲什麼還有其他功能需要拆分字符串。

value.smartSplit(/a/),例如,給出了更一致的結果,當sep是在開始時或在字符串的末尾:

row value value.smartSplit(/a/) 
1. abcdef [ "", "bcdef" ] 
2. bcdefa [ "bcdef", "" ] 
3. badef [ "b", "def" ] 

這是相同的結果用partition()omitfragment = true選項啓用:

row value value.partition(/a/, true) 
1. abcdef [ "", "bcdef" ] 
2. bcdefa [ "bcdef", "" ] 
3. badef [ "b", "def" ] 
+2

的OpenRefine '分裂' 功能(具有reg EXP)簡單地使用Java字符串「拆分「方法。這個方法的結果是一個「包含輸入序列的每個子串,由另一個匹配這個模式的子序列終止」 - 也就是說,它總是將你匹配的模式作爲序列的終止符 - 當模式匹配字符串中的第一個字符,其前面的子字符串是空的 - 因此是第一個空子字符串。更多信息請訪問https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#split(java.lang.CharSequence,%20int) –

+0

謝謝!我注意到value.partition和value.smartSplit ... –

+0

再次思考......即使preserveAllTokens = false,是否有正常的[「」,「abc」]? –