问题
I want to replace string in lua. Here is the string.
strng='\begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 10 \end{matrix}'
I want to replace
\begin{matrix} by {{
& by ,
\\ by },{
\end{matrix} by }}
I also want to remove all spaces. So the output will be
{{1,2,3},{4,5,6},{7,8,10}}
I have written the following function to do this.
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
This sometimes work but sometimes it does not work. There must be mistakes in the function. I am newbie to lua. Could the code be corrected? Any help will be appreciated. Thanks.
回答1:
When confused with escapes and backslashes, it's better to use long strings, which don't interpret those:
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)
回答2:
First of all your strings contain two escape sequences "\b"
and "\e"
.
I suppose you mean "\\b"
? Escape each backslash!
Then you have the problem that you replace "\\"
at any position with "},{"
.
But at "\\end"
you don't want that.
Because of that, after fixing the escape problem you get this output:
{{1,2,3},{4,5,6},{7,8,10},{}}
So either replace \\end
s first or change the other pattern so it won't affect "\\end"
Edit: if you get a string from outside like
\\
your pattern is "\\\\"
as you have to create a literal string with 2 backslashs which requires you to escape both, resulting in four backslashs. This pattern matches two backslash characters in a string.
来源:https://stackoverflow.com/questions/57215092/replacing-strings-in-lua-containing-special-characters