Подтвердить что ты не робот

Lua нужно разделить на запятую

Я googled, и я просто не понимаю. Похоже на такую ​​простую функцию, но, конечно, у Lua этого нет.

В Python я бы сделал

string = "cat,dog"
one, two = string.split(",")

и тогда у меня будет две переменные: one = cat. два = собака

Как это сделать в Lua!?

4b9b3361

Ответ 1

Если вы можете использовать библиотеки, ответ (как часто в Lua) на использует Penlight.

Если Penlight слишком тяжел для вас, и вы просто хотите разбить строку с одной запятой, как в вашем примере, вы можете сделать что-то вроде этого:

string = "cat,dog"
one, two = string:match("([^,]+),([^,]+)")

Ответ 2

Попробуйте это

str = 'cat,dog'
for word in string.gmatch(str, '([^,]+)') do
    print(word)
end

'[^,]' означает "все, кроме запятой, знак + означает" один или несколько символов ". В скобках создается захват (в данном случае не нужен).

Ответ 3

Добавьте эту функцию разделения вверху страницы:

function string:split( inSplitPattern, outResults )
  if not outResults then
    outResults = { }
  end
  local theStart = 1
  local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
  while theSplitStart do
    table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
    theStart = theSplitEnd + 1
    theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
  end
  table.insert( outResults, string.sub( self, theStart ) )
  return outResults
end

Затем сделайте следующее:

local myString = "Flintstone, Fred, 101 Rockledge, Bedrock, 98775, 555-555-1212"

local myTable = myString:split(", ")
for i = 1, #myTable do
   print( myTable[i] ) -- This will give your needed output
end

Для получения дополнительной информации посетите Учебное пособие: Lua String Magic

Сохранять кодирование...............:)

Ответ 4

- как и C strtok, разбивается на еще один символ разделителя (находит каждую строку, не содержащую каких-либо разделителей)

function split(source, delimiters)
        local elements = {}
        local pattern = '([^'..delimiters..']+)'
        string.gsub(source, pattern, function(value) elements[#elements + 1] =     value;  end);
        return elements
  end

- пример: var elements = split ( "bye # bye, miss $american @pie", ", # [email protected]" ) - возвращает "до свидания" "пока" "пропустить" "американский" "пирог"

Ответ 5

Вот как я это делаю на mediawiki:

str = "cat,dog"
local result = mw.text.split(str,"%s*,%s*")
-- result[0] will give "cat", result[1] will give "dog"

на самом деле, если вам не нужны пробелы, вы можете использовать:

str = "cat,dog"
local result = mw.text.split(str,",")
-- result[0] will give "cat", result[1] will give "dog"

Ответ 6

Функции вроде string.split() в основном не нужны в Lua, поскольку вы можете экспресс-операции в LPEG. Если вам по-прежнему нужна специальная функция, удобный подход для определения разделителя factory (mk_splitter() в нижеприведенном фрагменте) из которого вы можете получить пользовательские разделители.

local lpeg      = require "lpeg"
local lpegmatch = lpeg.match
local P, C      = lpeg.P, lpeg.C

local mk_splitter = function (pat)
  if not pat then
    return
  end
  pat            = P (pat)
  local nopat    = 1 - pat
  local splitter = (pat + C (nopat^1))^0
  return function (str)
    return lpegmatch (splitter, str)
  end
end

Преимущество использования LPEG заключается в том, что функция принимает как действительные строки и шаблоны Lua в качестве аргумента.

Вот как вы могли бы использовать его для создания функции, которая разбивает строки на символ ,:

commasplitter = mk_splitter ","

print (commasplitter [[foo, bar, baz, xyzzy,]])
print (commasplitter [[a,b,c,d,e,f,g,h]])