如何在forEach函数中将If函数与GREL集成?

时间:2012-11-21 15:38:03

标签: regex google-refine

我正在使用Google Refine。我的目标是将单个现有列拆分为两部分。我正在使用内置的“基于...添加列” - 函数。该列包含街道名称和相应的门牌号。例如,我有这个:

Stackoverflow Street 89

每一行都以相同的方式构建,这意味着街道名称可以是长或短,可以包含一个或多个单词,但它始终以(房屋)编号结尾,并且始终以空格分隔。< / p>

当我使用Google Refine时,我正准备使用GREL语句(Google精炼表达式语言)。这个想法是这样的:将每个值除以空白区域拆分成碎片。将每个拆分值保存在变量中。然后检查特定值是否包含数值(即门牌号)。如果是数值,请取该值并将其转发到输出。我已经有了类似的东西。

forEach(value.split(" "), v, v).join(";")

这是一个问题:如何在forEach函数中集成IF函数?如果我知道怎么做,我可能不仅可以分割值,还可以检查它的数字。要检查它是否为数字,可以使用isNumeric(value)。

我很欣赏每一个提示。谢谢,Jörg。

2 个答案:

答案 0 :(得分:2)

如果您描述的所有约束都成立(它始终是最后一块并且始终存在),我只使用value.split('')[-1]

在回答您提出的直接问题时,如果其他人在搜索中发现此问题,您的表达到目前为止相当于:

value.split(" ").join(";")

即forEach没有做任何事情。要集成if(),请将其用作表达式的一部分,该表达式构成forEach

的第3个参数
forEach(value.split(" "), v, if(isNumeric(v),null,v)).join(";")

我不确定您要尝试的输出格式是什么,但这会为您提供单元格值中所有非数字单词的分号分隔列表。

答案 1 :(得分:1)

我会在您的列上使用Edit column > Split into several columns...并将其与正则表达式\s(?=\d+)拆分,这意味着拆分必须是空格字符后跟多个数字的位置,并且数字是不是分裂的一部分。