1

我正在尝试使用 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, 4-D/F, 2-T/C   
181.    2XF622-UP (37LK) 6-S/F, 4-D/F, 2-T/C    
182.    3RF0147-UP (36LK) 6-S/F, 4-D/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

我想23Y1-Up, 27Y1-Up 从记录 172、 23Y2508-UP记录 179、27Y5050-UP记录 180 和整个67A1-UP, 78A1-UP, 85A1-UP, 86A1-UP, 59J1-644, 58J1-UP, 49J1-473, 22C1-UP, 91A1-UP, 88A1-UP记录 200 中提取

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

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

任何帮助深表感谢!谢谢

4

1 回答 1

0

使用match匹配整个字符串。

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

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

正则表达式演示

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

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

正则表达式演示

于 2021-03-04T09:48:14.867 回答