如何将正则表达式应用于列并将正则表达式匹配组保存到多列中?
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
我正在使用 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