部分文字列を使用した文字列の検索<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />全て、
検索条件として部分文字列を使用して文字列一致を検索しようとしています。 以下に示すように、複数の方法を試しました-RegExまたはPat Matchを使用してこれを行うより良い方法があるに違いないと思います-しかし、私はそれを正しく行うことができません. どんな助けでも大歓迎です。
例として、Air Traffic Sample Data テーブルを使用しています。
// 方法 # 1 Pat Match を使用する
dt = 現在のデータ テーブル();
ColNames = dt << Get COlumn Names();
一致 = リスト ();
sp = Pat Span("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 について各アイコンをテストします。一致が失敗した場合、regex は missing を返します。
Re: 部分文字列を使用して文字列を検索するクレイジ@JMP :
あなたが提供した解決策は機能しますが、フォローアップの質問が 2 つあります。
1. 一致が見つかった場合、どのようにインデックスを取得しますか?
2.列名が次のようになっている場合-私の場合はそうです
名前 (「iPhone 7、カリフォルニア州、はい」) - ColNames
名前(\!" iPhone7 、カリフォルニア、はい\!") -ColString
ご意見をお聞かせください 。
一番
ウダイ
Re: 部分文字列を使用して文字列を検索する多分このように:
dt = 現在のデータ テーブル();
ColNames = dt << Get COlumn Names();
コルストリング =チャー(列名);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
表示 (一致);
Match = "フライト ID";
これは、コンマまたは中括弧を使用しない列名に依存します。char 関数は、名前のリストを文字列に変換します。
{航空会社、航空会社コード、フライト番号、テール番号、フライト ID、イベント、空港、時刻、
元の時間、経度、緯度}
になる
"{航空会社、航空会社コード、フライト番号、テール番号、フライト ID、イベント、空港、時刻、元の時刻、経度、緯度}"
これに正規表現を選択したのは...どちらにしても美しくないからです。正規表現パターンの分析:
"[{,] 左中括弧またはカンマのいずれか
\s* オプションの空白
([^{,}]*ID[^{,}]*) 外側の括弧は \1 一致です (詳細は以下)
[,}]" コンマまたは右中括弧のいずれか
\1 の部分を分解します。
[^{,}]* 中括弧またはカンマ以外の 0 個以上の文字
列名で探している単語を識別します
[^{,}]*中括弧またはカンマ以外の 0 個以上の文字
正規表現の 3 番目の引数「\1」は、最初の開き括弧を使用して置換テキストを識別することを意味します。