Lua 尾随空格去除

tim*_*11g 2 string lua

我在 NodeMCU 环境中使用 Lua。我看到了这个问题中提出的空白修剪方法。

答案建议采用以下形式:

str = string.gsub(str, "%s+", "")
Run Code Online (Sandbox Code Playgroud)

我发现它没有任何影响。这是交互式命令的输出(使用 LuaLoader)。

> print("|",part1,"|")
|   172.16.0.19 |
> part1a = string.gsub(part1, "%s+", "")

> print("|",part1a,"|")
|   172.16.0.19 |
> 
Run Code Online (Sandbox Code Playgroud)

如果我检查十六进制字符串,我会看到有一些选项卡。显然 %s (空白模式)不认为制表符是空白。是否存在导致 %s 匹配选项卡 (0x09) 的设置?

cyc*_*ist 6

print函数使用它们之间的制表符打印其参数(在将它们转换为带有 的字符串之后tostring)。要正确检查这一点,请使用io.write(它不会在其参数之间添加制表符,只会将数字转换为字符串):

str = '   172.16.0.19 '
stripped = string.gsub(str, '%s+', '')
io.write('|', str, '|\n')
io.write('|', stripped, '|\n')
Run Code Online (Sandbox Code Playgroud)

请注意,这将删除所有空格和换行符,即使它们在字符串内。要删除两端的那些:

str = string.gsub(str, '^%s*(.-)%s*$', '%1')
Run Code Online (Sandbox Code Playgroud)

或在行尾和字符串末尾:

str = string.gsub(str, '[ \t]+%f[\r\n%z]', '')
Run Code Online (Sandbox Code Playgroud)