2017-09-24 65 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”]? –