文字列からテキストを抽出するこんにちは、
可能であれば、文字列から特定のテキストを抽出したいと思います。
\\ swirt.misc@CAS-K-CLERK \ K10447-Wit_OG lo hi TT-YYT(CTL1083.1)_172-7-10053 -303
\\ swirt.misc@CAS-K-CLERK \ K10445-Wit_OG lo hi ES WERT(CIL0858.1)_172-7-10046-600
\\ swirt.misc@CAS-K-CLERK \ K10437-Wit_OG lo hi TT-YYT(CTL1077.1)_172-7-10053-303
\\ swirt.misc@CAS-K-CLERK \ K10420-Wit_OG lo hi ES TRTR(CMA0851.1)_172-7-10047-600
\\ swirt.misc@CAS-K-CLERK \ K10377-Wit_OG_lo hi_ES_SI(CMS0499.1)_ 172-7-10041-600
\\ swirt.misc@CAS-K-CLERK \ K10451-Wit_OG lo hi TT-YYT(CTL1078
\\ swirt.misc@CAS-K-CLERK \ K10468-Wit_OG lo hi YYT DEV-020856(CTLR1073
\\ swirt.misc@CAS-K-CLERK \ K10022 -Wit_OG lo hi YYT DEV-020414(CTLR0999.1)
\\ swirt.misc@CAS-K-CLERK \ K10030-Wit_OG lo hi TT-YYT(CTL1008.1)
上からIDを抽出したい:
CTL1083.1
CIL0858.1
CTL1077.1
CMA0851.1
CMS0499.1
CTL1078
CTLR1073
CTLR0999.1
CTL1008.1
助けていただければ幸いです。
ありがとう、
トマシュ
スクリプティングRe:文字列からテキストを抽出します区切り文字として(および)を指定してWORDS関数を使用します。返されたリストの2番目の要素を使用します。以下のコードを実行し、ログウィンドウで出力を確認します。
dt = New Table( "Test Words", Add Rows( 9 ),
New Column( "Column 1", Character, "Nominal",
Set Values(
{
"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
word_list = words(one_value, "()");
print(word_list[2]);
);Re:文字列からテキストを抽出しますからの解決策@pmrozとても頑丈でいいです!
少し異なるアプローチは、データテーブルで数式を使用することかもしれません

開始区切り文字の場所は、「Contains」引数を使用して見つけることができます
Contains(:text, "(")
終了区切り文字の場所は同じ方法で見つけることができます
Contains( :text, ")" )
あいまいですが本当に楽しい引数「munger」を使用して、区切り文字の位置の間の文字列を抽出できます。
この場合、区切り文字の後の文字列、つまり終了区切り文字の前で終了する文字列が必要なので、1が先頭に追加され、末尾から減算されます。
この場合のmungerの関数は、引数、テキスト全体、開始位置、返される文字数を使用します。 Mungerは、検索や置換など、他の興味深いことも実行できます。
Munger( :text, :start + 1, (:stop - :start) - 1 )
これらすべてを1つの数式にまとめると、次のようになります。
Munger(
:text,
Contains( :text, "(" ) + 1,
(Contains( :text, ")" ) - Contains( :text, "(" )) - 1
)
Re:文字列からテキストを抽出します私が使うSUBSTR同様の効果のために。
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
start = contains(one_value, "(") + 1;
end = contains(one_value, ")") - 1;
len = end - start + 1;
result = substr(one_value, start, len);
print(result);
);Re:文字列からテキストを抽出します正規表現に興味がある場合...
Names Default to Here( 1 );
// make list of example original strings
sample = "\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)";
sample = Words( sample, "\!U000D" );
// Show( sample );
n = N Items( sample );
id = List();
// iterate over list and return target strings
For Each( { string }, sample,
If( Contains( string, ")" ),
Insert Into( id, Regex( string, "(.+\()(.+)(\).*)", "\2" ) ),
Insert Into( id, Regex( string, "(.+\()(.+)", "\2" ) )
);
);
Show( id );Re:文字列からテキストを抽出します私はそのような文字列抽出のための「Word()」関数が好きです
Names Default To Here( 1 );
dt = New Table( "Test Words",
Add Rows( 9 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values(
{"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
For( i = 1, i <= N Rows( dt ), i++,
Print( Word( 2, dt:column 1[i], "()" ) )
);Re:文字列からテキストを抽出します@pmroz 、あなたのコードはいつも私のものよりもはるかに無計画に見えます; )。
Substring(substr)はより単純なアプローチであり、私はmungerの良いケースに抵抗することはできません。
Craig Halesは、おそらくパターンマッチングを使用したさらに効率的なアプローチをいくつか持っています。 コミュニティページや彼のブログページにはすでにいくつかの例があると思います。
Re:文字列からテキストを抽出しますJMPで一斤のパンをスライスする方法はたくさんあります。
Re:文字列からテキストを抽出しますとても素敵で、すべての提案が魔法のように機能します。
スクリプトでMungerを使用しましたが、完璧に機能します。
どうもありがとう
トマシュ