Regex OpenRefine自定义文本刻面

Regex OpenRefine自定义文本刻面,regex,openrefine,Regex,Openrefine,我有一列名字,如: 夸利亚,彼得罗保罗 伯纳德,圣克莱沃人,或 E.卡尔文F 斯温格尔,M阿巴特,阿戈斯蒂诺,阿塞雷托 阿巴蒂,安东尼奥 10-NA)\u、费拉罗、朱塞佩、埃德、阿里奥斯蒂亚社区图书馆。Mss。(埃斯特里) 我想用openrefine创建一个自定义文本方面,将名称标记为“true”,其中一个逗号标记为“true”,其他所有名称标记为“false”,这样我就可以处理最后一个(“.E.,Calvin F.”不是问题,我稍后再处理) 我尝试使用“自定义文本方面”和以下表达式: if

我有一列名字,如:

  • 夸利亚,彼得罗保罗
  • 伯纳德,圣克莱沃人,或
  • E.卡尔文F
  • 斯温格尔,M阿巴特,阿戈斯蒂诺,阿塞雷托
  • 阿巴蒂,安东尼奥
  • 10-NA)\u、费拉罗、朱塞佩、埃德、阿里奥斯蒂亚社区图书馆。Mss。(埃斯特里)
我想用openrefine创建一个自定义文本方面,将名称标记为“true”,其中一个逗号标记为“true”,其他所有名称标记为“false”,这样我就可以处理最后一个(“.E.,Calvin F.”不是问题,我稍后再处理)

我尝试使用“自定义文本方面”和以下表达式:

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

但是结果都是假的。哪里不对?

我会使用前瞻性断言来检查是否只有1“,”可以从开始到行尾进行查找

^(?=[^\,]+,[^\,]+$).

不使用“匹配”,您可以使用“拆分”将字符串拆分为一个数组,使用逗号作为拆分字符。如果您测量结果数组的长度,它将给出字符串中的逗号数(即逗号数=长度-1)

因此,您的自定义文本方面表达式变为:

value.split(",").length()==2
这会给你正确/错误的答案


如果要根据出现的逗号数对数据进行细分,可以省去“==2”以获得一个方面,该方面只给出结果数组的长度。

您使用的表达式:

if(value.match(/([^,]+),([^,]+)/), "true", "false")
将始终求值为false,因为“match”函数的输出是数组或null。当使用“if”求值时,数组和“null”都不会求值为true

您可以将匹配函数包装为“isNonBlank”或类似形式,以获得布尔值true/false,这将导致“if”函数按您的需要工作。但是,一旦得到布尔值true/false结果,“if”将变得多余,因为它唯一的功能是将布尔值true/false转换为字符串“true”或“false”-这不会对自定义文本方面的values函数产生任何影响

因此:


应该使用match

Your-在
value
变量中真的有期望的值吗?附加提示:我在第二个子表达式中添加了换行符,如果一次只有一个字符串,这并不重要。谢谢,但它也不起作用,可能是value.match表达式th至少这是错的…:(
isNonBlank(value.match(/([^,]+),([^,]+)/))