是否有一种有效而优雅的方法可以在Lua中截断这样的数字?

时间:2014-01-02 03:26:30

标签: lua lua-patterns

我想做什么

我想做的事情非常简单。我想用Lua来检查Plist文件中的行。

假设Plist中的一行是<integer>-1.00</integer>,我需要关闭.00以使其成为<integer>-1</integer>

我做了什么

我使用一个函数来读取整个文件内容并逐行检查和替换。

local function doLineClean( cont )
    newcont = ''
    string.gsub( cont, "(.-)\r?\n", function(line)
        if string.match( line, "<integer>.-<%/integer>" ) then
            string.gsub( line, "<.->(.-)<.->", function(v)
            a, b = string.find(v,"%..*")
            if a and b then
                v = string.sub( v, 0, a - 1 )
            end
            line = "\t\t<integer>"..v.."</integer>"
            end  )
        end
        newcont = newcont .. line .. '\n'
    end  )
    return newcont
end

我的问题

有更高效,更优雅的方式来做同样的工作吗?

2 个答案:

答案 0 :(得分:7)

首先,请注意Lua的字符串模式不是完整的正则表达式。它们更有限,功能更弱,但通常足够(如本例所示)。

为什么不是一个更简单的替代品,如下所示?

local s1 = [[
<integer>3</integer>
<integer>3.12</integer>
<integer>-1.00</integer>
<integer>-1.99</integer>
<float>3.14</float>
]]

local s2 = s1:gsub('(<integer>%-?%d+)%.%d+','%1')
print(s2)
--> <integer>3</integer>
--> <integer>3</integer>
--> <integer>-1</integer>
--> <integer>-1</integer>
--> <float>3.14</float>

找到:

  1. 文字<integer>
  2. 可选地后跟文字连字符(%-?
  3. 后跟一个或多个数字字符(%d+
  4. 后跟一个文字句点(%.
  5. 后跟一个或多个数字字符(%d+
  6. 并将其替换为第一次捕获(上面1-3的内容)。

    请注意,如果您的浮点数不能包含前导数字(例如<integer>.99</integer>)或科学记数法(例如<integer>1.34e7</integer>),则此功能无效。

答案 1 :(得分:-2)

那应该做的工作:

s = "<integer>-1.00</integer>"
s:gsub("[.]%d*","")
相关问题