Строка LUA, отбросить не буквенно-цифровой или пробел

У меня есть пользовательский ввод, который может включать буквы, цифры или пробелы. Например:

local customer_input = 'I need 2 tomatoes';

or

local customer_input = 'I need two tomatoes';

Однако из-за характера моего приложения я могу получить #, *, @ и т. д. в строке customer_input. Я хочу удалить любые не буквенно-цифровые символы, кроме пробела.

Я пробовал с этими:

customer_input , _ = customer_input:gsub("%W%S+", ""); 

Этот отбрасывает все, кроме первого слова во фразе.

or

customer_input , _ = customer_input:gsub("%W%S", ""); 

Это на самом деле опускает пробел и первую букву каждого слова.

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

Большое спасибо за любую помощь!


person Wilmar    schedule 29.06.2020    source источник


Ответы (1)


Вы можете использовать

customer_input , _ = customer_input:gsub("[^%w%s]+", ""); 

См. демонстрацию Lua онлайн.

Сведения о шаблоне

  • [^ - start of a negated character class that matches any char but:
    • %w - an alphanumeric
    • %s - пробел
  • ]+ - 1 и более раз.
person Wiktor Stribiżew    schedule 29.06.2020
comment
Привет @Wiktor, большое спасибо! Работает как часы. Я совершенно забыл [...] для отрицания выражения. - person Wilmar; 30.06.2020