从名称中提取字符串你好,
我想从名称中提取一串数据。 字符串的位置因名称而异,并且名称中包含可变数量的子字符串。 一个例子如下所示:
(GPN) CI-4/E7/DH-1 15S-40 L1807
DEO (GPN) JD CI-4/E7/DH-1 5S-40 L1807
(GPN) JD CI-4/E7/DH-1 40 L1807
我对两部分感兴趣:一个包含字母 S 的字符串(因此在示例中为 15S-40 和 5S-40),如果 w 不存在,我对数值感兴趣。
是否可以使用标准公式函数提取它?
任何帮助都会很棒。
谢谢,
迪佩什
Re: 从名称中提取字符串您没有提供其中带有 W 的示例,因此未经测试。 我认为这将解决您的问题:
YourList = {"(GPN) CI-4/E7/DH-1 15S-40 L1807", "DEO (GPN) JD CI-4/E7/DH-1 5S-40 L1807", "(GPN) JD CI-4/E7/DH-1 40 L1807"};
Part1 = Part2 = {};
For(i=1,i<=N items(YourList),i++,
SubWords = Words(YourList[i], " ");
For(k=1,k<=N Items(SubWords),k++,
If(contains(SubWords[k],"S")>0,
Part1[i] = SubWords[k];
k=N Items(SubWords)+1;
)
);
);
For(i=1,i<=N items(Part1),i++,
If(contains(part1[i],"W")==0,
Part2[i] = right(part1[i],2);
)
);Re: 从名称中提取字符串使用正则表达式,您可以匹配“空格”后跟一些字符,直到您点击“S-”,然后匹配更多字符,直到您点击下一个“空格”
PAT = "(GPN) CI-4/E7/DH-1 15S-40 L1807";
x = regex(PAT,"\S+(?=S-).* ");
显示(x);
Re: 从名称中提取字符串你好,
谢谢回复。
不幸的是,我想提取的单词在字符串中没有共性 - 有时它在位置 2 有时它在位置 7!
问候,
迪佩什
Re: 从名称中提取字符串看来您要剥离的组件是倒数第二个分组。 如果是这种情况,那么下面的代码将执行此操作。 Word() 函数是一个非常强大的函数。 它的文档可以在脚本指南或脚本索引中找到
帮助==>书籍==>脚本指南
帮助==>脚本索引==>Word
Names Default To Here( 1 );
dt = New Table( "test",
New Column( "String",
character,
values(
{"(GPN) CI-4/E7/DH-1 15S-40 L1807", "DEO (GPN) JD CI-4/E7/DH-1 5S-40 L1807",
"(GPN) JD CI-4/E7/DH-1 40 L1807"}
)
)
);
dt << New Column( "Value", character, formula( Word( -2, :String, " " ) ) );