我申请GREL表达“value.split(/ A /)”一些细胞:Openrefine:分裂与正则表达式给出了奇怪的结果
abcdef -> [ "", "bcdef" ]
bcdefa -> [ "bcdef" ]
badef -> [ "b", "def" ]
我不明白为什么第一个单元格给了我一个“ “元素在结果表中。这是一个错误吗?
谢谢!
我申请GREL表达“value.split(/ A /)”一些细胞:Openrefine:分裂与正则表达式给出了奇怪的结果
abcdef -> [ "", "bcdef" ]
bcdefa -> [ "bcdef" ]
badef -> [ "b", "def" ]
我不明白为什么第一个单元格给了我一个“ “元素在结果表中。这是一个错误吗?
谢谢!
我不知道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" ]
的OpenRefine '分裂' 功能(具有reg EXP)简单地使用Java字符串“拆分“方法。这个方法的结果是一个“包含输入序列的每个子串,由另一个匹配这个模式的子序列终止” - 也就是说,它总是将你匹配的模式作为序列的终止符 - 当模式匹配字符串中的第一个字符,其前面的子字符串是空的 - 因此是第一个空子字符串。更多信息请访问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 –