我有一列包含技术人员输入的文本注释。 他们输入系统使用时间,我需要将其提取到它自己的列中。 幸运的是,数据非常一致,所以我能够使用 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]);