Lua нужно разделить на запятую
Я googled, и я просто не понимаю. Похоже на такую простую функцию, но, конечно, у Lua этого нет.
В Python я бы сделал
string = "cat,dog"
one, two = string.split(",")
и тогда у меня будет две переменные: one = cat. два = собака
Как это сделать в Lua!?
Ответы
Ответ 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]])