我有两个字符串 - 每个字符串有许多行,如下所示:
value_1 = "DEFAULT-VLAN"
value_2 = "WAN"
data = "HOSTNAME = DEFAULT-VLAN"
result = string.gsub(data,value_1,value_2)
print(result)
结果:
data = "HOSTNAME = DEFAULT-VLAN"
当连字符(“ - ”)从它正在工作的值中删除时。 有没有一种简单的方法可以解决这个问题?
谢谢!
答案 0 :(得分:10)
-
是Lua模式中的神奇角色。你需要逃脱它。
更改
value_1 = "DEFAULT-VLAN"
为:
value_1 = "DEFAULT%-VLAN"
答案 1 :(得分:1)
这是因为string.gsub
采用类似于Regex的模式 - 它不进行“文字”替换;这意味着您需要为%
添加具有特殊含义的任何字符作为前缀。
需要转义该模式的特殊字符列表包括:(
,)
,.
,+
,-
,{{1} },*
,?
,[
,]
,^
和$
。对于替换字符串,只有%
具有特殊含义。有了这个,我们可以编写一个替换函数来清理输入。
%
然后你可以:
local function replace(str, what, with)
what = string.gsub(what, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern
with = string.gsub(with, "[%%]", "%%%%") -- escape replacement
return string.gsub(str, what, with)
end