Lua 去除末尾空格

6
我将在NodeMCU环境中使用Lua语言,我看到有一种方式可以去除字符串中的空格,具体请参考这个问题的解答
该解答建议使用如下形式:
str = string.gsub(str, "%s+", "")

我发现它没有任何效果。以下是交互命令的输出(使用LuaLoader)。
> print("|",part1,"|")
|   172.16.0.19 |
> part1a = string.gsub(part1, "%s+", "")

> print("|",part1a,"|")
|   172.16.0.19 |
> 

如果我以十六进制查看字符串,我会发现其中有一些制表符。显然, %s(空格模式)不认为制表符是空格。是否有设置可以使 %s 匹配制表符(0x09)?


我发现%c是控制字符的模式,所以我尝试使用part1a = string.gsub(part1a, "%c+", "")。但这对字符串没有任何影响。 - tim11g
2个回答

9
print 函数会在其参数之间添加制表符并将它们转换为字符串后打印出来。要正确检查这一点,请使用 io.write(它不会在其参数之间添加制表符,只会将数字转换为字符串)。
str = '   172.16.0.19 '
stripped = string.gsub(str, '%s+', '')
io.write('|', str, '|\n')
io.write('|', stripped, '|\n')

请注意,这将删除字符串中的所有空格和换行符,即使它们在字符串内部也是如此。要删除两端的空格和换行符,请使用以下代码:
str = string.gsub(str, '^%s*(.-)%s*$', '%1')

或者在行尾和字符串末尾:

str = string.gsub(str, '[ \t]+%f[\r\n%z]', '')

谢谢 - 我显然是Lua的新手。我不知道Print会修改字符串。从现在开始,我会使用io.write进行调试。 - tim11g
好的,不要完全放弃 print。我发现在调试时 print 经常很有用。它通常会将所有参数转换为字符串,并在它们之间加上制表符并在末尾打印一个换行符,这通常是很有帮助的。但如果你需要查看字符串中的空格,那么它就不是最好的选择了。 - cyclaminist
嘿@cyclaminist,第二个代码块真的帮了我很多。我该如何从字符串中删除换行符前后的一个空格?我尝试简单地使用str:gsub('\n', ''),但它没有起作用。我想我需要使用一些这些“%s”,“[\n]”符号,但我没有经验。 - younyokel
str:gsub('\n', '')会移除str中的所有换行符,但不会对空格做任何处理。如果要移除所有可选的单个空格(如果有的话)在换行符之前和之后,可以使用str:gsub(' ?\n ?', '\n')。我不确定目的是什么,但希望这就是您想要的。如果它不起作用,您可能需要发布一个带有更多信息的单独问题。 - cyclaminist

3

不要使用print(something,somethingElse),而是使用print(something..somethingElse)。将独立的组件连接起来 - 不要仅仅打印一个逗号分隔的字符串列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接