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