我有一列包含技術人員輸入的文本註釋。 他們輸入系統使用時間,我需要將其提取到它自己的列中。 幸運的是,數據非常一致,所以我能夠使用 Regex Match() 提取信息,但選擇最後一個值讓我感到困惑。
Regex Match( :diagnosis, "(ys.+sage: ?)(\d{1,5})\n" );如何有效地從文本塊中提取系統使用時間?
示例文本如下所示:
UDI# 123456789123456789123456789456123
設備收到,缺少蓋子。
服務的主要原因:xxxxxxxxxx
系統使用:2372
系統 PM 到期時間:7627
xxx 用法:120
年年使用量:208
這是一個使用 JSL 函數提取系統使用情況的解決方案
Num( Word( 1, Substr( :Diagnosis, Contains( :Diagnosis, "System usage:" ) + 14 ), "\!n" ) )

我附上了上面的數據表
如果數據足夠一致,您可以在沒有正則表達式的情況下通過使用 Substr with Contains(和 Length)來做到這一點
Names Default To Here(1);
text ="UDI# 123456789123456789123456789456123
Device received, missing cover.
Major Reason For Service: xxxxxxxxxx
System usage: 2372
System PM due in: 7627
xxx usage: 120
yyy usage: 208";
stringToSearch = "System usage: ";
sysUsage = num(Substr(text, Contains(text, stringToSearch) + length(stringToSearch), 4));
show(sysUsage);Edit1:或者通過使用 Words 和 Word:
Names Default To Here(1);
text ="
UDI# 123456789123456789123456789456123
Device received, missing cover.
Major Reason For Service: xxxxxxxxxx
System usage: 2372
System PM due in: 7627
xxx usage: 120
yyy usage: 208";
list_of_rows = Words(text, "\!N");
Show(list_of_rows);
sysUsage = Word(3, list_of_rows[4]);
Show(sysUsage);
編輯2:</CODE>最後使用相同文本的正則表達式:</P><PRE><CODE class=" language-jsl">Names Default To Here(1);
text ="
UDI# 123456789123456789123456789456123
Device received, missing cover.
Major Reason For Service: xxxxxxxxxx
System usage: 2372
System PM due in: 7627
xxx usage: 120
yyy usage: 208";
//note "\2"
matchRegex = Regex(text, "(System usage: )(\d{1,5})", "\2");
Show(matchRegex);
//note index of number
matchList = Regex Match(text,"(System usage: )(\d{1,5})");
Show(matchList);
Show(matchList[3]);