3

我正在尝试从当前单元格(这是歌曲名称)中不区分大小写地删除单元格“艺术家”的值。我知道replace()可以将正则表达式作为参数(https://github.com/OpenRefine/OpenRefine/wiki/GREL-String-Functions#replacestring-s-string-f-string-r),我可以(?i)用于不区分大小写的模式.

但是如何replace()知道它的参数是正则表达式还是纯字符串呢?我见过的所有示例都/.../用于表示正则表达式,但我需要通过连接 cell 来制作“动态”正则表达式artist。所以这些不起作用:

 value.replace('(?i)'+cells['artist'].value+,"")
 value.replace('((?i)'+cells['artist'].value+')',"")
 value.replace('/(?i)'+cells['artist'].value+'/',"")

我更喜欢用 GREL 来做这件事,但是 Python/jython 的解决方案也可以。谢谢!

4

2 回答 2

1

如果您可以使用 Python,那么您应该能够执行以下操作:

import re
regex = re.compile('(?i)'+cells['artist'].value)
return regex.sub('', value)

(我还没有检查它是否真的有效!)

于 2019-12-25T18:11:58.737 回答
1

设置“不区分大小写”模式的更方便的方法是i在正则表达式之后添加:(value.replace(/Michael Jackson/i, "")不确定是否记录了此功能)

但这不适用于像cells.artist.value. 我不知道为什么。正如 Pintoch 所说,最简单的方法是通过 Python/Jython 使用如下脚本:

import re
regex = re.compile(cells['artist'].value, re.I) #case insensitive

return regex.sub('', value)
于 2019-12-25T20:18:36.987 回答