從各種字串中搜尋子字串我有一個名為失敗的列,其中包含各種字串。我喜歡搜尋以“ex”開頭的錯誤代碼。錯誤代碼是以“ex”開頭的 10 個字元的字串。並將第一個錯誤代碼放入“第一個代碼”列,所有錯誤代碼放入“所有代碼”列。花時間學習JMP幫助文件。

基礎資料分析與建模回覆:從各種字串中搜尋子字串這篇文章可能有助於從非結構化字串中提取故障部分程式碼
回覆:從各種字串中搜尋子字串這是創建這兩列的一種方法
公式:fst 代碼
start = contains(:Failure,"0x");
if(start>0,substr(:Failure,start,start+10),"");
公式:所有程式碼
theCodes = {};;
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, start + 10 ) );
theString = Substr( theString, start + 10 );
);
concat items(theCodes, ",");回覆:從各種字串中搜尋子字串非常感謝您及時的幫助。使用公式,會拾取錯誤代碼,但也會顯示一些其他字元。我用 left() 解決了這個問題。但我想知道為什麼其他角色會出現在那裡?

回覆:從各種字串中搜尋子字串如果沒有可用於調試問題的數據表,我不確定問題是什麼。試試這個修改,看看效果是否更好。
start = contains(:Failure,"0x");
x="";
if(start>0,x=substr(:Failure,start,start+10),"");
x;
回覆:從各種字串中搜尋子字串@txnelson感謝您花時間討論主題。我又嘗試了一下,還是失敗。這是供您調試的數據表。
回覆:從各種字串中搜尋子字串我的錯誤,
Substr 元素的長度應為 Start,而非 Start+10。
第一個代碼
start = Contains( :Failure, "0x" );
If( start > 0,
Substr( :Failure, start, 10 ),
""
);
所有程式碼
theCodes = {};
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, 10 ) );
theString = Substr( theString, start + 10 );
);
Concat Items( theCodes, "," );回覆:從各種字串中搜尋子字串謝謝一百萬!
回覆:從各種字串中搜尋子字串如果您可能混合了以 0x 開頭但不是錯誤代碼的訊息,簡單的 Contains 可能會起作用,但根據您向我們提供的範例,情況似乎並非如此(或者如果您有例如0x123456 它比您定義的錯誤代碼短)。
如果情況確實如此,我會查看正規表示式(您可以在 While 循環中使用類似的想法,就像吉姆在 contains 中展示的那樣)。但是您必須充分了解允許的字元才能建立可靠的模式以進行正確的匹配。
回覆:從各種字串中搜尋子字串@jthi感謝您的評論。我正在嘗試使用正則表達式來搜尋以 0x 開頭的子字串。根據您推薦的帖子, 「透過文字比對新列」是個好主意。我正在考慮如何建立錯誤代碼的模式(或錯誤代碼不限於 10 個字元)。 Backreferences和Capturing Groups for Regex的指令可以幫助我理解相關的JSL,但對我來說寫JSL有點困難。我認為讀的 JSL 範例越多,我就能越早學會寫 JSL。回到主題,你能幫我展示一下錯誤代碼的正規表示式模式嗎?例如在你的帖子中,它是
failure_pattern = "[A-Z]+\d+[A-Z]?"
回覆:從各種字串中搜尋子字串鑑於您提供的範例資料表,使用 Regex() 函數提取第一個錯誤代碼的公式為
Regex( :Failure, "[A-Z]+\d+[A-Z]?" )
Regex() 函數的定義和範例可在腳本索引中找到
回覆:從各種字串中搜尋子字串JSL 可能沒有所有標誌( 正規表示式:為所有標誌新增選項, 為正規表示式 Match() 新增標誌以尋找所有不重疊的模式),但它仍然接受類似的模式。使用https://regex101.com/之類的東西來測試您的正規表示式模式(如果您不確定它們是否會將數據發送到某個伺服器,請不要使用真實數據,除非您可以共享它),然後在JSL 中嘗試。 regex101 等網站向您解釋了該模式。
我對您的錯誤代碼沒有正確的定義,因此我無法提供良好的模式來開始。我只知道它以 0x 開頭,但我需要知道允許的字符,這些允許的字符是否有任何順序以及如何確定它何時結束(以及長度,如果有的話)。
回覆:從各種字串中搜尋子字串今天我花了一些時間閱讀腳本索引中的 Regex() 函數的定義和範例,並學習了 Regex 模式結構,例如 ([a-zA-Z])\s([0-9])。使用https://regex101.com/測試正規表示式模式的分享非常精彩。
Regex() 或 Regex match() 是一個有點複雜的函數。我需要從社區找到更多範例來練習 Regex() 的用法。非常感謝您分享連結。