我读了一个文件:
local logfile = io.open("log.txt", "r")
data = logfile:read("*a")
print(data)
Run Code Online (Sandbox Code Playgroud)
输出:
...
"(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S
...
Run Code Online (Sandbox Code Playgroud)
是的,logfile看起来很糟糕,因为它充满了各种命令
如何从数据变量中调用gsub和删除ie "(\.)\n(\w)", r"\1 \2"行?
下面的代码段,不起作用:
s='"(\.)\n(\w)", r"\1 \2"'
data=data:gsub(s, '')
Run Code Online (Sandbox Code Playgroud)
我想有些逃避需要完成.任何简单的方案?
更新:
local data = [["(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S]]
local s = [["(\.)\n(\w)", r"\1 \2"]]
local function esc(x)
return (x:gsub('%%', '%%%%')
:gsub('^%^', '%%^')
:gsub('%$$', '%%$')
:gsub('%(', '%%(')
:gsub('%)', '%%)')
:gsub('%.', '%%.')
:gsub('%[', '%%[')
:gsub('%]', '%%]')
:gsub('%*', '%%*')
:gsub('%+', '%%+')
:gsub('%-', '%%-')
:gsub('%?', '%%?'))
end
print(data:gsub(esc(s), ''))
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好,只有我需要转义,转义字符%,因为如果%在匹配的字符串中它不会工作.我想:gsub('%%', '%%%%')还是:gsub('\%', '\%\%'),但它不工作.
更新2:
好的,%如果在我刚刚更正的"表格"中首先设置,可以通过这种方式进行转义
:可怕的经历:
更新3:
逃避^和逃避$
^模式开头的插入符号锚定主题字符串开头的匹配.$模式结尾处的A 锚定主题字符串末尾的匹配.在其他位置,^并$没有特殊的含义,代表自己.
所以更好的想法是逃避^,$只有当它们被发现(分别)和字符串的开头或结尾时.
Lua 5.1 - 5.2+不兼容性
string.gsub如果替换字符串包含%后跟除allowed%或digit 之外的字符,则会引发错误.
%替换字符串中不需要加倍.见lua-users.
根据Lua编程:
The character `%´ works as an escape for those magic characters. So, '%.' matches a dot; '%%' matches the character `%´ itself. You can use the escape `%´ not only for the magic characters, but also for all other non-alphanumeric characters. When in doubt, play safe and put an escape.
这是不是意味着您可以简单地放在%每个非字母数字字符前面并且没问题.这也是将来的证明(在引入新的特殊字符的情况下).像这样:
function escape_pattern(text)
return text:gsub("([^%w])", "%%%1")
end
Run Code Online (Sandbox Code Playgroud)
它在Lua 5.3.2上为我工作(仅进行了基本测试).不确定它是否适用于旧版本.
为什么不:
local quotepattern = '(['..("%^$().[]*+-?"):gsub("(.)", "%%%1")..'])'
string.quote = function(str)
return str:gsub(quotepattern, "%%%1")
end
Run Code Online (Sandbox Code Playgroud)
逃跑然后gsub它走了吗?