разбить строку на разделитель - PullRequest
5 голосов
/ 17 мая 2011

У меня есть строка типа first part;second part.Я хочу разделить его на ; и вернуть вторую часть.Все отлично работает с:

start = mystring:find(';')
result = mystring:sub(start)

Но я надеялся сделать это в одну строку:

result = mystring:sub(mystring:find(';'))

Он не выдает ошибку, но не возвращает ожидаемый результат.Не большая проблема, так как он отлично работает на двух строках кода, но понимание того, почему он не работает на oneliner, поможет мне лучше понять, как работает lua.

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

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

s="first part;second part"  
print(s:match(";(.-)$"))

или это:

print(s:sub(s:find(";")+1,-1))
3 голосов
/ 17 мая 2011

find фактически возвращает два значения, которые являются начальным и конечным индексами того, где находится искомая строка.В этом случае оба индекса равны 11.
Когда вы затем передаете эти два индекса в sub, вы получаете подстроку, которая начинается и заканчивается в 11, поэтому вы получаете только ';'.

1 голос
/ 18 мая 2011

Это также будет работать:

result = mystring:sub((mystring:find(';')))

Дополнительные круглые скобки гарантируют, что sub вызывается только с одним аргументом, поэтому для второго аргумента будет использоваться значение по умолчанию (конец mystring).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...