我有一列名字如下:
我想用openrefine创建一个自定义文本构面,标记为" true"带有一个逗号的名字和" false"所有其他人,以便我可以与最后的人一起工作(" .E。,Calvin F。"不是问题,我稍后会使用它。)
我正在尝试使用"自定义文字方面"和这个表达:
if(value.match(/([^,]+),([^,]+)/), "true", "false")
但结果都是假的。什么是错误的部分?
答案 0 :(得分:2)
您正在使用的表达式:
if(value.match(/([^,]+),([^,]+)/), "true", "false")
将始终评估为false,因为'匹配'的输出function是数组或null。在评估时,如果'既不是数组也不是' null'评价为真。
您可以将匹配功能包装在' isNonBlank'或者类似于得到一个布尔值true / false,这将导致' if'功能可以随心所欲地工作。但是,一旦你有一个布尔真/假结果,' if'变得多余,因为它唯一的功能是将布尔值true / false转换为字符串" true"或"假" - 它不会对自定义文本方面的值函数产生任何影响。
所以:
isNonBlank(value.match(/([^,]+),([^,]+)/))
应该使用匹配
为您提供所需的结果答案 1 :(得分:1)
您可以使用'split'将字符串拆分为数组,而不是使用'match',而使用逗号作为拆分字符。如果测量结果数组的长度,它将给出字符串中的逗号数(即逗号数=长度-1)。
因此,您的自定义文本构面表达式变为:
value.split(",").length()==2
这会给你真/假
如果你想根据出现的逗号数量来细分数据,你可以不用'== 2'来获得一个只能得到结果数组长度的方面。
答案 2 :(得分:0)
我会用lookahead断言检查是否只有1“,”可以从开头找到直到行尾。
^(?=[^\,]+,[^\,]+$).*
https://regex101.com/r/iG4hX6/2