2015-11-13 4 views
2

Эта тема частично обрабатывается перед тем другим пользователем в теме: Lua string.gsub with Multiple PatternsLua: string.gsub шаблон (ы), чтобы разрешить множественный шаблон замены

У меня возникли проблемы, и я считаю, что это с моим рисунком (второй). Вот мой пример gsub кода я пытаюсь использовать:

local dateCode = "MMM/dd-YYYY:ss" 

--dateCode = dateCode:gsub(".*", {["%/"] = "s", ["%-"] = "n", ["%:"] = "c"}) --original code but removed after @Etan's comments. 
dateCode = dateCode:gsub(".*", {["/"] = "s", ["-"] = "n", [":"] = "c"}) 

print(dateCode) 

MMM/dd-YYYY:ss --printed 

MMMsddnYYYYcss --desired 

Я считаю, что я не должен смотреть на все символы, как я в настоящее время, но я не уверен, что образец, который я должен использовать для переменной dateCode. Идея состоит в том, чтобы заменить ключи первым альфа-символом, с которого он начинается.

+0

Какой вы хотите получить здесь? 'MMMsddnYYYYcss'? Ключи в замене 'gsub' должны совпадать с захваченными битами строки, которые соответствуют шаблону. У вас нет '%' в вашем входе, поэтому ни один из ваших ключей не может совпадать. –

+0

@ EtanReisner вы правы. Это желаемый результат. Я ошибочно использовал '%' как escape-символы в моих ключах. Благодарю. После удаления все равно не появляется желаемый результат. – Pwrcdr87

+0

Подумайте, что вы соответствуете вашему шаблону. Каким будет «результат» матча? * Это * то, что 'gsub' ищет в аргументе таблицы. Поэтому, если вы хотите заменить только эти символы, вам нужно индивидуально сопоставить * просто * эти символы. –

ответ

3

Поскольку вы хотите выберите набор символов, чтобы быть заменяет, поставить их в наборе символов шаблона:

dateCode = dateCode:gsub("[/:-]", {["/"] = "s", ["-"] = "n", [":"] = "c"}) 

Что происходит в настоящее время, с рисунком .* на месте, она совпадает со всей строкой , Так как строка "MMM/dd-YYYY:ss" не имеет индексированного значения в хеш-таблице (второй аргумент), замена фактически не происходит.

+0

Спасибо hjpotter. Я использовал следующий «dateCode: gsub («% p », {["/"] =" s ", [" - "] =" n ", [": "] =" c "})' и работал , Каковы были бы последствия этого для меня по пути, который вы только что отправили? Ahhh ... Я получаю ваше объяснение !!! Спасибо. – Pwrcdr87

+1

'% p' покрывает намного больше символов. Он также будет содержать символы, такие как '+', '!' И т. Д. Хотя влияние на производительность (или вывод) не повлияет на я, я бы предложил использовать более жесткий предел в вашем шаблоне 'gsub'. Если вы уверены, что хотите, используйте именно это. – hjpotter92

+0

Удивительная информация. Спасибо, hj! – Pwrcdr87