我可以在 Match() 中使用 Contains()我需要搜索字符列以查看每行值是否包含特定字符串,然後在新列中相應地創建指標名稱/組(它將搜索 ~14 個特定字符串)。我很確定嵌套 IF() 會很慢......過去,當我想要匹配精確的字符串時,我曾使用過 Match(),但是我可以使用通配符嗎?
我嘗試了 * 和 % 但無濟於事:
Match( :columnOfInterest,
"*StringA*", "String A",
"*StringB*", "String B",
"" )
然後我嘗試在 Match() 中使用 Contains() 但仍然沒有成功:
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA"), "String A",
Contains(:columnOfInterest, "StringB"), "String B",
"" )
我看到 Contains 返回一個數字,所以我還嘗試添加 > 比較,甚至包裝在 NUM() 中:
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA") > 0, "String A",
Contains(:columnOfInterest, "StringB") > 0, "String B",
"" )
和
Match( :columnOfInterest,
Num(Contains(:columnOfInterest, "StringA")) > 0, "String A",
Num(Contains(:columnOfInterest, "StringB")) > 0, "String B",
"" )
任何幫助是極大的讚賞。謝謝!
回复:我可以在 Match() 中使用 Contains()這解決了我的問題。 完全忘記了關聯數組。 多謝!回复:我可以在 Match() 中使用 Contains()JMP初學者

您可以使用關聯數組來存儲要映射到不同字符串的字符串的查找表。
例如,上面的 :searchTerms 和 :mappedTerms 就是此類關聯數組的鍵和值。 在下面的代碼中,該數組被分配給變量“lookup”。 在結果映射列的最終公式中,您將看到正則表達式找到的每個匹配項都用作查找數組的參數。
例如,取上表中的第 1 行。 找到的結果是“Integra”,映射的結果是lookup[“Accord”],即“GroupA”
fmlaExpr = Expr(
If( Row() == 1,
lookUp = Associative Array( :searchTerms, :mappedTerms, Empty() );
vals = :searchTerms << get values;
doThis = Expr(
lookUp[Regex( :ColumnOfInterest, Char( "(" || Concat Items( vals, "|" ) || ")" ) )]
);
doThis;
,
doThis
)
);
Eval( Eval Expr( :RESULTS-mapped << set formula( Expr( Parse( Char( NameExpr(fmlaExpr)) ) ) ) ) );
附件是完整的示例表。
回复:我可以在 Match() 中使用 Contains()<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />請注意,“\1”實際上並沒有什麼區別,因為我們只有 1 個模式。 如果有多個括號,那麼確實可以有“\1”或“\n”,其中 n <= 模式數。 請參閱 JMP 在線文檔 ==>常用表達
回复:我可以在 Match() 中使用 Contains()這一切都是有道理的,現在我要嘗試讓事情複雜化......
regex(test,"(ABC|DEF|GHI)","\1")
我可以返回與匹配的字符串不同的字符串嗎?
- 如果找到“ABC”,則返回“group1”,
- 如果找到“DEF”,則返回“group2”等
或者正則表達式不可能做到這一點?
回复:我可以在 Match() 中使用 Contains()感謝 PBZ 和 Jim,Regex() 工作得很好,現在我在編寫腳本時有了一個可以使用的新工具!非常感激!
回复:我可以在 Match() 中使用 Contains()正則表達式就是這樣做的方法,這是一個非常簡單的示例,它將執行您想要的多重匹配。只需用您要查找的字符串擴展它即可。它將返回它找到的匹配項。
names default to here(1);
test="Answer is ABC";
TheMatch = regex(test,"(ABC|DEF|GHI)","\1");
回复:我可以在 Match() 中使用 Contains()JMP初學者
我會完全避免條件語句。 更好的解決方案是使用正則表達式。 例如,假設您的搜索詞是汽車型號、“Accord”、“Civic”等,則可以編寫正則表達式語句: “匹配任何條款” 。 在 JSL 中,列公式如下所示:
Regex( :columnOfInterest, "(Accord|Civic|Corolla|Dakota|Integra|Maxima|Ranger|S10)" );
附件是一個簡單的演示文件。 正則表達式在字符串模式匹配方面非常強大。 有很多用於匹配部分單詞、詞乾等的選項。希望這會有所幫助!
-PBZ