从大小不等的字符串中提取数字我有一列带有嵌入数字的字符串。 我知道如何确定这些字符串是否包含我正在寻找的正确文本,但不知道如何提取每个字符串之后的值。 如果字符串大小相等,我可以根据位置使用 munger 函数,但这无法完成,因为字符串大小不一致。
例如“修正是 abcde +0.2,这里有更多文本 fghij -1。”
我想查询“abcde”和“fghij”,并在字符串出现后立即在空间中提取 +0.2 和 -1 各自的值。 通常有一个空格,后跟一个 +/- 和一个数字(整数和小数到小数点后一位,如上所示)。
回复:从大小不等的字符串中提取数字还有另一种方式 - 尝试单词功能。这是列公式:
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;回复:从大小不等的字符串中提取数字您还可以使用正则表达式()在列公式中使用正则表达式的函数。 如果您提供的示例未显示所有可能的条件,则该方法可能会有所帮助。 这是一个说明这个想法的脚本。
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 模式。
回复:从大小不等的字符串中提取数字查看 Word() 函数。鉴于您提供的示例,您可以简单地查找字符串中的第二个单词,基于找到一个空白
Word(2, <您的字符串列>, " " )
或者
您可以 Contains() 查找“+”或“-”,然后从那里 substr() 字符串以获取数值
附上以下数据表
