Openrefine自定义文本分面

时间:2016-02-17 09:32:24

标签: regex openrefine

我有一列名字如下:

  • Quaglia,Pietro Paolo
  • Bernard,Clairvaux,Saint或
  • .E。,Calvin F.
  • Swingle,M Abate,Agostino,Assereto
  • Abati,Antonio
  • 10-NA)\ u,Ferraro,Giuseppe,ed,Biblioteca comunale ariostea。 MSS。 (Esteri

我想用openrefine创建一个自定义文本构面,标记为" true"带有一个逗号的名字和" false"所有其他人,以便我可以与最后的人一起工作(" .E。,Calvin F。"不是问题,我稍后会使用它。)

我正在尝试使用"自定义文字方面"和这个表达:

if(value.match(/([^,]+),([^,]+)/), "true", "false")

但结果都是假的。什么是错误的部分?

3 个答案:

答案 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