[lua] lua中匹配字符串小数

Posted alphaai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[lua] lua中匹配字符串小数相关的知识,希望对你有一定的参考价值。

如何从字符串中正确匹配出小数(带符号)字符串?

使用 string.gmatch

说明见官方文档,摘录如下:

string.gmatch (s, pattern)

Returns an iterator function that, each time it is called, returns the next captures from pattern over string s.

If pattern specifies no captures, then the whole match is produced in each call.

As an example, the following loop

     s = "hello world from Lua"
     for w in string.gmatch(s, "%a+") do
       print(w)
     end

will iterate over all the words from string s, printing one per line. The next example collects all pairs key=value from the given string into a table:

     t = {}
     s = "from=world, to=Lua"
     for k, v in string.gmatch(s, "(%w+)=(%w+)") do
       t[k] = v
     end

 

例子:

local numberT = {}

local paramStr = ‘[2.04523,-3.4901,12030.39458,20]‘
for k in string.gmatch(paramStr, ‘(%-?%d+%.*%d*)‘) do
  table.insert(numberT, tonumber(k))
end

for _, v in ipairs(numberT) do
  print(‘type(v)=‘..type(v), ‘v=‘..v)
end
--运行结果为:
type(v)=number v=2.04523
type(v)=number v=-3.4901
type(v)=number v=12030.39458
type(v)=number v=20

--上述中的模式串带小括号(),表示一个匹配结果中需要符合我们所定义的匹配方式(%-?%d+%.*%d*)
--总结:碰到lua中的特殊字符(比如 . / % - + ? 等等)需要先用%作为转义字符,
--比如上面的模式串 (%-?%d+%.*%d*) 分为 %-? %d+ %.* %d*
-- %-? %是转义了后面跟着的- 而?表示匹配0或1个,亦即匹配0或1个-
-- %d+ %d表示匹配数字 跟着+号表示匹配1或者多个数字
-- %.* %是转义了后面跟着的. 跟着的*号表示匹配0到多个.
-- %d* 表示匹配0或者多个数字

https://www.cnblogs.com/AlphaAI/p/9345657.html 


















以上是关于[lua] lua中匹配字符串小数的主要内容,如果未能解决你的问题,请参考以下文章

在Pandoc lua过滤器中连接字符串片段

Lua的string库函数lua中string的模式匹配

lua 实现策划需要保留的小数位数

lua入门笔记7 字符串库

Lua模式匹配

Lua模式匹配