使用部分字符串搜索字符串<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”表示使用第一个左括号来标识替换文本。