2017-01-04 4 views
3

Как разбить строку в Lua точкой с запятой?Lua split string точкой с запятой

local destination_number="2233334;555555;12321315;2343242" 

Здесь мы можем видеть, что несколько раз появление точки с запятой (;), но мне нужен вывод из выше строки только до первого появления.

Попробовал код:

if string.match(destination_number, ";") then 
    for token in string.gmatch(destination_number, "([^;]+),%s*") do 
     custom_destination[i] = token 
     i = i + 1 

    end 
end 

Выход:

2233334 

Я попытался выше кода, но новичок в Lua сценариев поэтому не может получить точный синтаксис для этого.

+1

'destination_number: gmatch '(% d +) ;?'. Замените «% w», если вам тоже нужны буквы. – greatwolf

+0

Разделение струн было спрошено и объяснено много раз повсюду здесь и по всему Интернету. – warspyking

+0

Если один из ответов ниже был полезен для вас, тогда примите его пожалуйста. –

ответ

2

Если вы просто хотите появление в первый, то это работает:

print(string.match(destination_number, "(.-);")) 

Узор гласит: все, вплоть до, но не включая первую точку с запятой.

Если вы хотите, чтобы все вхождения, то это работает:

for token in string.gmatch(destination_number, "[^;]+") do 
    print(token) 
end 
+1

Как насчет 'a ;; c; d'? Предполагается, что вторая строка присутствует и равна пустой строке. Эта ситуация очень часто встречается в CSV-файлах –

+0

@EgorSkriptunoff, конечно. ОР должен более точно определить проблему. – lhf

0

Я надеюсь, что этот код поможет вам:

function split(source, sep) 
    local result, i = {}, 1 
    while true do 
     local a, b = source:find(sep) 
     if not a then break end 
     local candidat = source:sub(1, a - 1) 
     if candidat ~= "" then 
      result[i] = candidat 
     end i=i+1 
     source = source:sub(b + 1) 
    end 
    if source ~= "" then 
     result[i] = source 
    end 
    return result 
end 

local destination_number="2233334;555555;12321315;2343242" 

local result = split(destination_number, ";") 
for i, v in ipairs(result) do 
    print(v) 
end 

--[[ Output: 
2233334 
555555 
12321315 
2343242 
]] 

Теперь result это таблица, которая содержит эти цифры.

Смежные вопросы