【问题标题】:Lua string.gsub replace patternLua string.gsub 替换模式
【发布时间】:2014-11-15 19:08:18
【问题描述】:

我正在开发一个图形计算器程序。我有一个显示 'y=' 函数的图表。

如果找到诸如“x * 5”之类的模式(其中 x 乘以某个值,但先给出 x),我想用 5x 替换它。这是我目前拥有的。

local func = "x * 5"
print(func:gsub("%*", ""):gsub(" ", ""):gsub("x%d+", "%d+x"))

--[[
    get rid of the '*' symbol, get rid of spaces, then 
    replace x(digit) with (digit)x

    EXPECTED OUTPUT: 5x, OUTPUT: d+x
]]

我在想我可能可以使用 string.reverse 函数,但我不知道如何处理这个问题。有人可以帮忙吗?

更新:这就是我现在所拥有的。它正在输出“2x.5”

local func = "x * 5"
print(func:gsub("%*", ""):gsub(" ", ""):gsub("x%d+", function(match) return match:sub(2) .. match:sub(1, 1))

【问题讨论】:

  • string.reverse 将适用于这种简单的情况。它不适用于x * 2.5。那里的gsub 调用需要捕获模式中的数字并在替换中使用模式引用。
  • 啊,我明白你的意思了。我该怎么做呢?
  • :gsub("x([%d.]+)", "%1x") 但至少在那个 sn-p 中,你也没有确保你的输入是你期望的格式。 gsub 链对 2x + 5x * y 没有多大用处。
  • 很遗憾地说(因为它不像您希望做的那么简单)但是您确实需要编写一个解析器语法,也许使用 LPeg。
  • 我实际上想出了一个简单的方法来做到这一点。而不是解析函数来显示它(基本上从 5 * x 到 5x),我决定做完全相反的事情。我这样做是为了让您可以在函数中输入 3x,脚本会将其转换为 3 * x,然后使用 loadstring 执行它。感谢您的帮助。

标签: string lua reverse gsub


【解决方案1】:

我实际上想出了一个简单的方法来做到这一点。而不是解析函数来显示它(基本上从 5 * x 到 5x),我决定做完全相反的事情。我这样做是为了让您可以在函数中输入 3x,脚本会将其转换为 3 * x,然后使用 loadstring 执行它。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2012-07-29
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多