lua 中包含特殊字符的字符串替换

我想在 lua 中替换字符串。以下是字符串:

strng='\begin{matrix}   1 & 2 & 3 \\    4 & 5 & 6 \\    7 & 8 & 10 \end{matrix}'

我想替换

\begin{matrix} by {{
& by ,
\\ by },{
\end{matrix} by }}

我还想去掉所有空格。所以输出将会是

{{1,2,3},{4,5,6},{7,8,10}}

我编写了下面的函数以实现此目的:

function tempsubst(m1)
m1 = matrixprint(m1)
if type(m1) ~="string" then  return  m1 end
m1 = string.gsub(m1,"\begin%{matrix%}","{{" )
m1 = string.gsub(m1,"\\","},{" )
m1 = string.gsub(m1,"%&","," )
m1 = string.gsub(m1,"end%{matrix%}","}}" )
m1= string.gsub(m1 , "%s+", "")
return m1
end

有时函数会正常工作,但有时会出现错误。函数中必定有错误。我是 lua 的新手。是否能够纠正代码?任何帮助都将不胜感激。谢谢。

原文链接 https://stackoverflow.com/questions/57215092

点赞
stackoverflow用户2858170
stackoverflow用户2858170

首先,你的字符串包含两个转义序列 \b\e

我猜你是指 "\\b"?需要对每个反斜杠进行转义!

然后你遇到一个问题,就是你用 "},{" 将任何位置的 "\\" 替换了。但在 "\\end" 处你不想这样做。

因此,在解决转义问题后,你会得到以下输出:

{{1,2,3},{4,5,6},{7,8,10},{}}

所以,要么先替换 \\end,要么改变其他模式,使其不影响 "\\end"

编辑: 如果你从外部获取一个字符串,比如:

\\

你的模式为 "\\\\"",因为你必须创建一个具有 2 个反斜杠的字面字符串,这要求你对两个反斜杠都进行转义,结果得到四个反斜杠。这个模式匹配字符串中的两个反斜杠字符。

2019-07-26 08:17:36
stackoverflow用户107090
stackoverflow用户107090

当遇到转义字符和反斜杠的时候,最好使用长字符串,它们不会解释它们:

m1=[[\begin{matrix}   1 & 2 & 3 \\    4 & 5 & 6 \\    7 & 8 & 10 \end{matrix}]]
print(m1)
m1 = string.gsub(m1,[[\begin{matrix}]],"{{" )
m1 = string.gsub(m1,[[\\]],"},{" )
m1 = string.gsub(m1,[[&]],"," )
m1 = string.gsub(m1,[[\end{matrix}]],"}}" )
m1= string.gsub(m1 , [[%s+]], "")
print(m1)
2019-07-26 11:32:59