如何从随机位置的字符串部分获取不确定的数值?

时间:2017-04-15 18:23:07

标签: string lua

我正在使用lua来解析我从api请求中给出的大字符串序列。收到的字符串序列如下所示:

<stats>+200 Stock Price<br>+100% Stock Price Increase <br><stock>+100% Stock Size</stock><br>+10% Company Revenue

所以我需要,例如,获得&#34;股价上涨&#34;所以我可以稍后在编码中对它进行计算。字符串总是以这种格式出现,但每个变量的位置可以是随机的。例如,&#34;股票价格&#34;可以在字符串的开头,中间或结尾发送,并且没有用于知道其位置的模式。

提供的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

您似乎可以使用多种模式来使用Lua patterns获取所需的值。

请注意,为了匹配任何数字,有一个%d速记类,并匹配任何空格%s。请注意,%符号用于转义这些字符,要匹配文字%符号,您需要将其加倍%%

请参阅Lua demo

s = [[<stats>+200 Stock Price<br>+150% Stock Price Increase <br><stock>+110% Stock Size</stock><br>+10% Company Revenue]]
print(string.match(s, [[(%d+%%)%s+Stock Price Increase]]) .. " - Stock Price Increase")
print(string.match(s, [[(%d+%%)%s+Stock Size]]) .. " - Stock Size")
print(string.match(s, [[(%d+%%)%s+Company Revenue]]) .. " - Company Revenue")
print(string.match(s, [[(%d+)%s+Stock Price]]) .. " - Stock Price")

输出:

150% - Stock Price Increase
110% - Stock Size
10% - Company Revenue
200 - Stock Price

答案 1 :(得分:1)

这是一个不需要知道字段名称的解决方案:

function lottery() {
var from;
var to; 
var selected=new Array();
var person=
[
 {"name":"Georgia","age":"45"},
 {"name":"John","age":"38"},
 {"name":"Michael","age":"29"},
];
if (arguments[0] == "all") {
  from=0;
  to=person.length;
}
else {
  from=Math.floor(Math.random()*3);
  to=Math.floor(Math.random()*3+1);
}
for (i=0; i<to; i++) {
    selected[i]=person[from];
    from=(from+1)%3;
}
return selected;
}

您可以将数据存储在表格中,而不是打印。