【问题标题】:Break a string to table将字符串拆分为表格
【发布时间】:2012-04-07 01:04:22
【问题描述】:

目前,我正在使用这个功能:

function tokenize( str )
  local ret = {}
  string.gsub( str, "([-%w%p()%[%]®+]+)", function( s ) table.insert( ret, s ) end )
  return ret
end

现在,字符串中可以包含任何字符(如上面的函数所示)。我想将字符串分解为仅检测空格而不检测其他字符的单词。我已经看到提到的解决方案 here 但即使在 codepad.org (link) 上也没有帮助我。我在 PtokaX 工作,如果你想知道的话。我试过使用

print( split( 'foo/bar/baz/test','/' ) )

也是如此,但这也不起作用。 :(

还有其他更简单的方法来创建表格吗?

【问题讨论】:

    标签: string lua lua-table lua-patterns ptokax


    【解决方案1】:

    为什么不只匹配非空格字符,而不是匹配所有其他字符?

    function tokenize( str )
      local ret = {}
      string.gsub( str, "(%S+)", function( s ) table.insert( ret, s ) end )
      return ret
    end
    

    如果要使用其他字符进行拆分,模式集否定也很有用:

    s='foo#bar!baz*'
    s:gsub('([^#!%*]+)',function(s) print(s) end)
    

    另请参阅:Patterns in the Lua Manual。 另外请记住,Lua 模式与正则表达式不同,它们更轻量,但也有其局限性。

    【讨论】:

      【解决方案2】:

      如果您要使用更高级的结构,我推荐LPeg

      require"lpeg"
      lpeg.locale(lpeg)
      
      local pattern = lpeg.P(
          lpeg.Ct(
              (lpeg.space^0*lpeg.C(-lpeg.space)^1)^0
          )
      )
      
      local ret = lpeg.match(pattern, str)
      
      for k,v in ipairs(ret) do
          print(k, v)
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-16
        • 1970-01-01
        • 2015-09-01
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        相关资源
        最近更新 更多