如何将正则表达式应用于列并将正则表达式匹配组保存到多列中?

How to apply regex to a column and save regex match groups into multiple columns?

我正在使用 openrefine 对我的数据集进行一些清理。我正在尝试将正则表达式应用于我的数据集中的列。该正则表达式返回多个匹配组。我想将这些组保存到不同的(各自的)新列中。我可以像这样应用正则表达式 Edit column>Add column based on column。从语言中选择 Python / Jython 后,我将 Expression 如下所示:

import re 
regex = r"custom_regex"
value = re.findall(regex, value)
# Check if anything matched with the regex and if so return the first match:
if len(value)>0:
    return value[0] 
# In order to get the groups: return value[0][0], or value[0][1], or value[0][2] etc.
# If there is no match, return value (empty list)
else:
    value = "No Match" #If you want it to return a message instead of empty list
    return value

但是使用这种方法,我一次只能创建一列。有没有办法创建与正则表达式匹配组一样多的列?

您不能直接使用 OpenRefine 创建多个新列。但是,您可以使用 Grel 代替 Python:

来简化脚本
if(value.find(/YOUR REGEX/) > 0, value.find(/YOUR REGEX/).join(|), "No match")

Grel(OpenRefine 版本 >= 3)中的 .find() 方法与 Python 中的 re.findall() 非常相似。

将结果存储在新列中,然后使用 "Edit column/split into several columns" 和竖线 (|) 作为分隔符以生成与组数一样多的新列。


对应的 Jython 可能是这样的:

value = "1995 is a year"

代码

import re 
regex = r"(\d+).+?(year)"
match = re.findall(regex, value)
if match:
    return "|".join(value[0])
else:
    return "No Match" 

结果

1995|year