我正在尝试从当前单元格(这是歌曲名称)中以不区分大小写的方式删除单元格“ artist”的值。我知道replace()
可以使用正则表达式作为参数(https://github.com/OpenRefine/OpenRefine/wiki/GREL-String-Functions#replacestring-s-string-f-string-r),并且我可以将(?i)
用于不区分大小写的模式。
但是replace()
如何知道其参数是正则表达式还是纯字符串?我见过的所有示例都使用/.../
表示正则表达式,但是我需要通过连接单元格artist
来制作“动态”正则表达式。所以这些不起作用:
value.replace('(?i)'+cells['artist'].value+,"")
value.replace('((?i)'+cells['artist'].value+')',"")
value.replace('/(?i)'+cells['artist'].value+'/',"")
我更喜欢使用GREL,但是使用Python / jython的解决方案也可以。谢谢!
如果您可以使用Python,那么您应该可以执行以下操作:
import re
regex = re.compile('(?i)'+cells['artist'].value)
return regex.sub('', value)
(我没有检查它是否真的有效!)
设置“不区分大小写”模式的一种更方便的方法是在正则表达式后添加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)