名前から文字列を抽出するこんにちは、
名前からデータの文字列を抽出したいと思います。文字列の位置は名前によって異なり、名前には可変数のサブ文字列が含まれます。以下に例を示します。
(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
私は2つの部分に興味があります。文字S(例では15S-40&5S-40)を含む文字列と、wが存在しない場合、数値に興味があります。
標準の数式関数を使用してこれを抽出することは可能ですか?
どんな助けでも素晴らしいでしょう。
おかげで、
ディペッシュ
Re:名前から文字列を抽出する削除するコンポーネントは最後から2番目のグループであるようです。 その場合、以下のコードがそれを行います。 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, " " ) ) );
Re:名前から文字列を抽出するこんにちは、
返信いただきありがとうございます。
残念ながら、抽出したい単語が文字列のどこにあるかという共通点はありません-時々それは位置2です時々それは位置7です!
よろしく、
ディペッシュ
Re:名前から文字列を抽出する正規表現を使用すると、「S」を押すまで「スペース」に続けていくつかの文字を照合し、次の「スペース」を押すまでさらに文字を照合できます。
PAT = "(GPN)CI-4 / E7 / DH-1 15S-40 L1807";
x = regex(PAT、"\ S +(?= S-)。*");
show(x);
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);
)
);