从字符串中移除引号

Lua:
从字符串中移除引号

如何操作:

以下是在Lua中将那些引号丢到一边的方法:

local function remove_quotes(str)
  return (str:gsub("^%p(.*)%p$", "%1"))
end

print(remove_quotes('"Hello, World!"'))     -- Hello, World!
print(remove_quotes("'Goodbye, Quotes!'"))  -- Goodbye, Quotes!

就这样!那些引号像烘干机里的袜子一样消失了。

深入探讨

自从语言能够处理文本以来,人们就一直在字符串中擦拭引号,这几乎是自古以来的事了。在Lua中,gsub函数承担起了重活,使用模式像手术刀一样切除引号。其他选择?当然,你可以在支持它的语言中使用正则表达式,或者自己编写一个遍历每个字符的循环(啊,可能会觉得无聊,但嘿,这是你的时间)。

Lua的模式匹配提供了类似正则的体验,无需导入整个库。脱字符(^)和美元符($)分别匹配字符串的开始和结尾;%p匹配任何标点符号。在摆脱了前导和尾随的标点之后,我们用(.*),捕获其他所有内容,并使用"%1"替换整个匹配项,利用该捕获组。

请记住,Lua的模式匹配不如完全的正则引擎那么强大 — 例如,它不能计数或回溯。这种简单性既是福也是祸,这取决于你要处理的引号以及它们隐藏的位置。

另请参阅

更深入地了解Lua的模式匹配,可以参考PiL(Lua编程)书籍:http://www.lua.org/pil/20.2.html

为了纯粹的优雅,看看其他语言是如何做的进行比较,从Python的str.strip开始:https://docs.python.org/3/library/stdtypes.html#str.strip