部分文字列を使用した文字列の検索<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />全て、
部分文字列を検索条件として一致する文字列を検索しようとしています。 以下に示すように、私は複数の方法を試しましたが、これを行うには RegEx または Pat Match を使用するより良い方法があるはずだと信じていますが、正しく理解することができません。 助けていただければ幸いです。
例として、航空交通サンプル データ テーブルを使用しています。
// 方法 #1 パットマッチを使用する
dt = 現在のデータ テーブル();
ColNames = dt << Get COlumn Names();
一致 = リスト();
sp = パット スパン("ID");
Pat Match(ColNames,sp>>Match);
マッチ;
// これにより、一致する結果は得られません。 ただし、同じコード内で (ID 自体が列名である場合)、これは機能します。 そこで、検索文字列の一部を使用して検索を行う方法を理解したいと思います。
// メソッド #2 Contains() を使用する
for( i=1, i<= N Items(ColNames),i++,
If(Contains(ColNames ,"ID")== 1,
Insert Into(Match,i);
);
);
最高
ウデイ
Re: 部分文字列を使用した文字列検索明示的なループの方が簡単かつ明確になるように思えます。
for( icol = 1, icol <= nitems(colnames), icol++,
// char(colnames) に正規表現を使用します) 必要な一致が得られたら、このループから抜け出します。
)
列名にはカンマが含まれており、icol インデックスが必要なので、正規表現ははるかに単純になります。これはテストされていませんが、次のようなものです
if( ! ismissing( regex( char(colnames[icol ]), "ID" ) ), Break() );
名前に含まれる ID について各アイコンをテストします。正規表現は、一致が失敗した場合に missing を返します。
Re: 部分文字列を使用した文字列検索クレイジ@JMP :
あなたが提供した解決策は機能しますが、もしよろしければ、フォローアップの質問が 2 つあります。
1. 一致するものが見つかった場合、どのようにインデックスを取得しますか?
2.列名が次のようになっている場合 - 私の場合はそうなっています
Name( "iPhone 7、カリフォルニア、はい" ) - ColNames
名前(\!" iPhone7 、カリフォルニア、はい\!") - ColString
ご意見をお聞かせください 。
最高
ウダイ
Re: 部分文字列を使用した文字列検索おそらく次のようになります:
dt = 現在のデータ テーブル();
ColNames = dt << Get COlumn Names();
コルストリング =文字(列名);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
show(一致);
一致 = "フライト ID";
これは、カンマや中括弧を使用していない列名によって異なります。char 関数は、名前のリストを文字列に変換します。
{航空会社、航空会社コード、フライト番号、尾翼番号、フライト ID、イベント、空港、時間、
元の時刻、経度、緯度}
になる
"{航空会社、航空会社コード、フライト番号、尾翼番号、フライト ID、イベント、空港、時刻、元の時刻、経度、緯度}"
私がこれに正規表現を選択したのは、どちらにしても美しくないからです。正規表現パターンを分析すると、次のようになります。
"[{,] 開き中括弧またはカンマのいずれか
\s* オプションの空白
([^{,}]*ID[^{,}]*) 外側の括弧は \1 に一致します (詳細は後述)
[,}]" コンマまたは右中括弧のいずれか
\1 の部分を分解すると、次のようになります。
[^{,}]* 中括弧やカンマ以外の 0 個以上の文字
列名で検索している単語を ID にします
[^{,}]*中括弧やカンマ以外の 0 個以上の文字
正規表現の 3 番目の引数「\1」は、最初の開き括弧を使用して置換テキストを識別することを意味します。