是否有一种有效而优雅的方法可以在Lua中截断这样的数字?
发布时间:2020-12-14 21:45:15 所属栏目:大数据 来源:网络整理
导读:我想做的事 我想做的事情非常简单.我想用Lua来检查Plist文件中的行. 假设如果Plist中的一行是整数 -1.00 / integer,我需要将.00关闭以使其为 integer -1 / integer. 我做了什么 我使用函数来读取整个文件内容,并逐行检查和替换. local function doLineClean(
我想做的事
我想做的事情非常简单.我想用Lua来检查Plist文件中的行. 假设如果Plist中的一行是<整数> -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,a - 1 ) end line = "tt<integer>"..v.."</integer>" end ) end newcont = newcont .. line .. 'n' end ) return newcont end 我的问题 是否有更高效,更优雅的方式来完成同样的工作? 解决方法
首先,请注意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-3的内容). 请注意,如果您的浮点数不能包含前导数字(例如<整数> .99< / integer>)或科学记数法(例如< integer> 1.34e7< / integer>),则无法使用此功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |