我用字符串解析打了一个小块.我有一个字符串:
footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr
我使用gsub删除字符串的一部分有困难.通常我会这样做
lineA = footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr lineB = footage/down/temp/cars_[100]_upper/ newline = lineA:gsub(lineB, "")
这通常会给我'cars_ [100] _upper.exr'
问题是gsub不喜欢字符串中的[]或其他特殊字符,不像string.find gsub没有使用'plain'标志来取消模式搜索的选项.
我无法手动编辑行以包含特殊字符的转义字符,因为我正在执行文件比较脚本.
任何帮助从新线lineA
使用lineB
将是非常感谢.
摘自Lua 2e编程的第181页:
神奇的人物是:
( ) . % + - * ? [ ] ^ $字符'%'用作这些魔术角色的转义符.
所以,我们可以想出一个简单的函数来逃避这些神奇的角色,并将它应用到你的输入字符串(lineB
):
function literalize(str) return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", function(c) return "%" .. c end) end lineA = "footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr" lineB = literalize("footage/down/temp/cars_[100]_upper/") newline = lineA:gsub(lineB, "") print(newline)
当然打印:cars_[100]_upper.exr
.