使用部分字串搜尋字串<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />全部,
我正在嘗試搜尋以部分字串作為搜尋條件的字串匹配項。 我已經嘗試了多種方法,如下所示 - 我相信一定有更好的方法使用 RegEx 或 Pat Match 來做到這一點 - 但我無法做到正確。 任何幫助將不勝感激 。
為了舉例,我使用空中交通範例資料表:
// 方法 #1 使用 Pat Match
dt = 當前資料表();
ColNames = dt << 取得列名稱();
匹配=列表();
sp = 帕特跨度(“ID”);
帕特匹配(ColNames,sp>>匹配);
匹配;
// 這不會產生任何匹配項。 然而,在相同的程式碼中 - 如果 ID 本身是列名 - 這是可行的。 所以我想了解如何使用部分搜尋字串來進行搜尋。
// 方法 #2 使用 Contains()
for( i=1, i<= N 項(ColNames),i++,
如果(包含(ColNames ,「ID」)== 1,
插入(匹配,i);
);
);
最好的
烏代
回覆:使用部分字串搜尋字串聽起來顯式循環會更容易、更清晰。
for( icol = 1, icol <= nitems(colnames), icol++,
// 在 char(colnames) 上使用正規表示式)並在獲得所需的匹配時跳出此循環。
)
由於列名確實有逗號,並且您需要 icol 索引,並且正規表示式可以簡單得多。這沒有經過測試,但類似
if( ! ismissing( regex( char(colnames[ icol ]), "ID" ) ), break() );
將測試每個圖示的名稱中的 ID。如果匹配失敗,則正規表示式將傳回缺失。
回覆:使用部分字串搜尋字串克雷格@JMP :
雖然您提供的解決方案有效 - 如果可以的話,我有兩個後續問題:
1. 當找到匹配項時,如何取得索引?
2.如果列名看起來像這樣-在我的例子中就是這樣
名稱(“iPhone 7,加州,是”)- ColNames
姓名(\!” iPhone 7 ,加州,是的\!」) - 列字串
請指教 。
最好的
烏代
回覆:使用部分字串搜尋字串也許是這樣的:
dt = 當前資料表();
ColNames = dt << 取得列名稱();
列字串 =字元(暱稱);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
顯示(匹配);
匹配=“航班ID”;
這取決於不使用逗號或大括號的列名。char 函數將名稱清單轉換為字串:
{航空公司、承運人代碼、航班號碼、尾號、航班 ID、事件、機場、時間、
原始時間、經度、緯度}
變成
“{航空公司、承運商代碼、航班號碼、尾號、航班 ID、事件、機場、時間、原始時間、經度、緯度}”
我為此選擇了正規表示式,因為......無論如何它都不會很漂亮。分解正規表示式模式:
"[{,] 左花括號或逗號
\s* 可選空格
([^{,}]*ID[^{,}]*) 外括號是 \1 匹配(更多內容請見下文)
[,}]" 逗號或右大括號
分解 \1 部分:
[^{,}]* 零個或多個非大括號或逗號的字符
在列名稱中標識您要尋找的單字
[^{,}]*零個或多個非大括號或逗號的字符
正規表示式的第三個參數「\1」表示使用第一個左括號來標識替換文字。