從大小不等的字符串中提取數字我有一列帶有嵌入數字的字符串。 我知道如何確定這些字符串是否包含我要查找的正確文本,但不知道如何提取每個字符串之後的值。 如果字符串大小相等,我可以根據位置使用 munger 函數,但由於字符串大小不一致,因此無法做到這一點。
例如“修復是 abcde +0.2,這裡有更多文本 fghij -1。”
我想查詢“abcde”和“fghij”,並在字符串出現後立即在空間中提取 +0.2 和 -1 各自的值。 通常有一個空格後跟一個 +/- 和一個數字(如上所示,整數和小數保留一位小數)。
Re: 從大小不等的字符串中提取數字另一種方式 - 嘗試單詞功能。這是列公式:
look_for = {"abcde", "fghij", "klmno"};
wlist = Words( :Column 1, " " );
one_num = .;
For( i = 1, i <= N Items( look_for ), i++,
one_word = look_for[i];
f = Contains( wlist, one_word );
If( f,
one_num = Num( wlist[f + 1] );
Break();
);
);
one_num;Re: 從大小不等的字符串中提取數字您還可以使用正則表達式()在列公式中使用正則表達式的函數。 如果您提供的示例未顯示所有可能的條件,則該方法可能會有所幫助。 這是一個說明這個想法的腳本。
Names Default to Here( 1 );
text = "The fix in is abcde +0.2, there is more text here fghij -1.";
answer 1 = Num( Regex( text, ".*abcde ([-+]?\d?.?\d?)", "\1" ) );
answer 2 = Num( Regex( text, ".*fghij ([-+]?\d?.?\d?)", "\1" ) );
這文本腳本中的變量表示列公式的當前行。 這回答 1將是第一個新結果列的同一行中的結果。 您可以使用公式等號右側的表達式。
這個例子很簡單。 如果案文的性質或數字的序言更加複雜,則需要對其進行擴展和完善。
您還可以使用 JMP 模式來匹配、返回和替換字符串。
Re: 從大小不等的字符串中提取數字檢查 Word() 函數。鑑於您提供的示例,可以根據查找空白來簡單地查找字符串中的第二個單詞
Word(2, , " " )
要么
您可以 Contains() 找到“+”或“-”,然後從那裡,substr() 字符串以獲取數值
附上以下數據表
