LUA 字符串,删除非字母数字或 space

LUA string, drop non alphanumeric or space

我的客户输入可能包括字母、数字或 space。例如:

local customer_input = 'I need 2 tomatoes';

local customer_input = 'I need two tomatoes';

但是,由于我的应用程序的性质,我可能会在 customer_input 字符串中得到 #、*、@ 等。我想删除任何非字母数字字符,但 space.

我试过这些:

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

除了短语中的第一个单词,这个词会删除所有内容。

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

这个实际上删除了 space 和每个单词的第一个字母。

所以,我知道我做错了,但我不确定如何匹配字母数字 + space。我相信这一定很简单,但我一直无法弄明白。

非常感谢您的帮助!

您可以使用

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

Lua demo online

图案详情

  • [^ - 匹配任何字符的取反字符 class 的开头,但:
    • %w - 字母数字
    • %s - 一个空格
  • ]+ - 1 次或更多次。