從名稱中提取字串你好,
我想從名稱中提取一串資料。 字串的位置在名稱中有所不同,並且名稱中具有可變數量的子字串。 一個例子如下所示:
(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 不存在,我對數值感興趣。
是否可以使用標準公式函數來提取它?
任何幫助都會很棒。
謝謝,
迪佩什
回覆:從名稱中提取字串您還沒有提供帶有 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);
)
);回覆:從名稱中提取字串使用正規表示式,您可以匹配一個“空格”,後面跟著一些字符,直到您點擊“S-”,然後匹配更多字符,直到您點擊下一個“空格”
PAT =“(GPN)CI-4/E7/DH-1 15S-40 L1807”;
x = regex(PAT,"\S+(?=S-).* ");
顯示(x);
回覆:從名稱中提取字串你好,
謝謝回覆。
不幸的是,我想要提取的單字在字串中沒有共通點 - 有時是位置 2,有時是位置 7!
問候,
迪佩什
回覆:從名稱中提取字串看來您要剝離的組件是倒數第二個分組。 如果是這種情況,那麼下面的程式碼將做到這一點。 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, " " ) ) );