【问题标题】:Spliting string of arithmetic operations in lua在lua中拆分算术运算字符串
【发布时间】:2019-08-13 17:35:20
【问题描述】:

以下是lua中的算术运算字符串。

local str ='x+abc*def+y^z+10'

这个字符串可以拆分,以便显示单个变量或数字吗?例如,假设字符串str 被拆分为表s。然后输出将是

s[1] = x
s[2] = abc
s[3] = def
s[4] = y
s[5] = z
s[6] = 10

拆分由运营商+,-,*,\,^,%完成

【问题讨论】:

    标签: function split lua arguments lua-table


    【解决方案1】:

    也试试这个更简单的模式:

    local str ='x+(abc*def)+y^z+10'
    for w in str:gmatch("%w+") do
            print(w)
    end
    

    【讨论】:

      【解决方案2】:

      您可以使用 string.gmatch 来迭代您的字符串。 随意将其他运算符添加到模式中。

      参考https://www.lua.org/manual/5.3/manual.html#6.4.1

      local str ='x+abc*def+y^z+10'
      local s = {}
      
      for operand in str:gmatch('[^%+%*%^]+') do
        table.insert(s, operand)
      end
      

      【讨论】:

      • 这在使用括号时不起作用。例如x+(abc*def)+y^z+10
      • @Maths89 我知道。请再次阅读您的问题。我在那里看不到任何括号。我的回答完美地解决了所描述的问题。我无法读懂你的想法。
      • 好的。没问题。感谢您的帮助。
      【解决方案3】:

      您可以使用string.gmatch 来做您想要做的事情。你会使用模式%+%-%*%^/

      local str ='x+abc*def+y^z+10'
      local s = {}
      for value in str:gmatch("[%+%-%*%^/]*(%w*)[%+%-%*%^/]*") do
        s[#s + 1] = value
      end
      print(unpack(s))
      

      另外,如果您需要 \ 作为运算符,如您的问题所示,则需要使用额外的 \ 进行转义。

      更多关于 lua 模式的资源:@​​987654321@

      【讨论】:

      • 请注意,在 Lua 5.2 中 unpack 已移至 table.unpack
      猜你喜欢
      • 2014-02-17
      • 2014-11-21
      • 2017-04-06
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 2013-02-19
      • 2021-04-21
      • 2010-11-28
      相关资源
      最近更新 更多