【问题标题】:Lua trailing space removalLua尾随空格删除
【发布时间】:2018-07-05 06:18:14
【问题描述】:

我在 NodeMCU 环境中使用 Lua。我看到了空格修剪的方法presented in this question

答案建议采用这种形式:

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+", "")。这仍然对字符串没有影响。

标签: string lua


【解决方案1】:

print 函数打印其参数并在它们之间使用制表符(在将它们转换为带有tostring 的字符串之后)。要正确检查这一点,请使用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 进行调试。
  • 好吧,不要完全放弃print。我发现print 通常对调试很有用。将所有参数转换为字符串并使用它们之间的制表符和最后的换行符打印它们通常很有帮助。如果您需要在字符串中查看空格,这不是最佳选择。
  • 嘿@cyclaminist,第二个代码块真的帮助了我。如何从字符串中删除换行符前后的一个空格?我试图简单地str:gsub('\n', ''),但它没有用。我假设我需要使用其中的一些“%s”、“[\n]”符号,但我没有使用它们的经验。
  • str:gsub('\n', '') 删除str 中的所有换行符;它对空间没有任何作用。要删除换行符前后的所有可选单个空格(如果有),请使用str:gsub(' ?\n ?', '\n')。我不确定目的是什么,但希望这就是你想要的。如果它不起作用,您可能需要发布一个包含更多信息的单独问题。
【解决方案2】:

print(something..somethingElse) 代替print(something,somethingElse)。连接单独的组件 - 不要只打印以逗号分隔的字符串列表。

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2015-07-06
    • 1970-01-01
    • 2016-09-10
    • 2015-05-11
    相关资源
    最近更新 更多