2

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

Stackoverflow Street 89

每一行的结构都相同,这意味着街道名称可以长也可以短,可以包含一个或多个单词,但它总是以(门牌)号码结尾,并且总是用空格分隔。

当我使用 Google Refine 时,我正准备使用 GREL 语句(Google Refine Expression Language)来做到这一点。这个想法是这样的:将除以空格的每个值分成几块。将每个拆分值保存在一个变量中。然后检查特定值是否包含数值(即门牌号)。如果它是一个数值,则取该值并将其转发到输出。我已经得到了这样的东西。

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

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

我感谢每一个提示。谢谢,约尔格。

4

2 回答 2

3

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

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

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

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

forEach(value.split(" "), v, if(isNumeric(v),null,v)).join(";")

我不确定您要实现哪种输出格式,但这将为您提供一个以分号分隔的单元格值中所有非数字单词的列表。

于 2012-11-21T16:39:06.777 回答
1

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

于 2012-11-21T15:55:47.260 回答