regex OpenRefine:如果单元格的内容与特定的字符串模式匹配,如何删除它?

dba5bblo  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(125)

所以我在OpenRefine中做我的第一个项目,我还没有完全理解GREL的东西,以及如何用它转换我的project。
问题是:我有一个列,我只想删除与特定模式匹配的单元格的内容,并且只有当它们不包含其他内容时才删除。
我的专栏看起来像这样:(图像不允许)

LF 2(1927)40
 
LF 2(1927)42
 
"Wirtin" LF 2(1927)44
 
Lottchen LF 3(1928)3
 
LF 3(1928)7
 
"Mit schönem Gruß Arthur Powalla aus Hamburg" LF 3(1928)9
 
LF 3(1928)14 DF 3(1927)1

我想删除所有只包含字符串模式(如LF 2(1927)42)的单元格的内容。如果它们包含更多的内容,我希望保留所有内容,而不删除该模式。
在变形…我尝试使用以下GREL命令:
if(value==(LF \d\(\d*\)\d+),null,value)
我之前使用了包含在其中的正则表达式进行不同的操作,它完成了它应该做的事情。所以我认为错误出在别处。它发送的错误是这样的:
Parsing error at offset 14: Missing )
非常感谢你帮我这件事!!

xmakbtuz

xmakbtuz1#

GREL不支持对赋值或比较表达式进行模式匹配的功能。
你要找的表达方式是

if(isNull(value.match(/LF \d\(\d*\)\d+/)), value, null)

请注意,我告诉GREL对单元格(value)的内容使用match函数,并尝试应用包含在/中的正则表达式。
然后,我们通过isNull区分null(模式不适用)和空数组(模式适用,但模式没有定义子模式)。
或者,您也可以使用带有正则表达式的文本过滤器,然后对过滤后的数据执行转换。当你不熟悉GREL时,这会更直观。

相关问题