我有
所有模式的所有出现都必须用其对应的替换文本替换。每个模式在字符串中可能不止一次存在。
当前,我通过遍历模式/替换对列表并每次使用string.gsub
来做到这一点:
for _, pattern, replace in iter(replace_patterns) do
body = body:gsub(pattern, replace)
end
({iter
是一个帮助程序,可以更好地遍历模式。)
问题:这是最好的方法吗?我担心这样做效率低下,因为每次调用gsub
都会扫描整个长字符串。
P.S。我读了https://stackoverflow.com/a/12865406/5005936(帮助我减少了字符串使用量和其他用法)和https://stackoverflow.com/a/38422229/5005936(但我不想在这种情况下编写本机代码...)
答案 0 :(得分:0)
您可能想尝试的事情(您必须在字符串上运行一些基准测试以查看最有效的方法):
find
代替gsub
,因为它占据起始位置,这样可以避免为每个模式重新扫描相同的(长)字符串find
来获取替换开始处的位置,并剪切(子)字符串以在表中填充替换及其之间的字符串。然后将结果连接在一起以获取所需的字符串。您将必须运行测试,因为在不知道模式数量和每种模式的大概替换数量的情况下很难给出一些合理的建议。