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