问题描述
我正在尝试使用 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-Up
,
23Y2508-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 组 -
.*$
匹配该行的其余部分
或者在只匹配由连字符分隔的单词字符的组中捕获
^[^:]*:\s*(\w+-\w+(?:,\s+\w+-\w+)*).*$