openrefine 在符号之间提取值

问题描述

我正在尝试使用 Openrefine 从整个字段中提取文本字符串。 这是我的数据集的摘录:

172.    D3B: 23Y1-Up,27Y1-Up  (36 LK) 6-S/F Rollers,4-D/F Rollers,2-Carrier Rollers
179.    D3C: 23Y2508-UP (37LK) 6-S/F,4-D/F,2-T/C  
180.    27Y5050-UP (37LK) 6-S/F,2-T/C   
181.    2XF622-UP (37LK) 6-S/F,2-T/C    
182.    3RF0147-UP (36LK) 6-S/F,2-T/C
200.    D4D:67A1-UP,78A1-UP,85A1-UP,86A1-UP,59J1-644,58J1-UP,49J1-473,22C1-UP,91A1-UP,88A1-UP

我想从记录 172 中提取 23Y1-Up,27Y1-Up23Y2508-UP 来自记录 179,27Y5050-UP 来自记录 180 以及整个 67A1-UP,88A1-UP 来自记录 200

所以基本上规则是提取 :if present 和 ( if present之间的所有内容。也许将其限制在出现一个或多个字符串 UP

的地方

所以我使用 value.match 基于现有列添加一个新列。 我试图根据我的范围调整一些查询,但尽管进行了多次尝试,但我离成功还很远。 我从这个正则表达式 value.match(/\:?\s*(\w+\.?)+?.*/)[0] 开始,我认为它会在分号(和空格)之后隔离任何单词,但它仅适用于 BEFORE... 昨天我成功提取了 LK 之前的数字,这也是我的数据集的相关信息,但我无法掌握这一点。

非常感谢任何帮助! 谢谢

解决方法

使用 match 匹配整个字符串。

您可以使用带有否定字符类的单个捕获组来排除匹配的 (

^[^:]*:\s*([^(]+).*$
  • ^[^:]*:\s* 匹配直到第一个 : 后跟可选的空白字符
  • ( 捕获组 1
    • [^(]+ 匹配 1+ 次出现的任何字符,除了 (
  • ) 关闭第 1 组
  • .*$ 匹配该行的其余部分

regex demo

或者在只匹配由连字符分隔的单词字符的组中捕获

^[^:]*:\s*(\w+-\w+(?:,\s+\w+-\w+)*).*$

regex demo