lua 匹配重复模式

lua match repeating pattern

我需要以某种方式封装 lua 模式匹配中的模式,以便在字符串中找到该模式的整个序列。我的意思是什么。 例如我们有这样的字符串: "word1,word2,word3,,word4,word5,word6, word7," 我需要匹配第一个单词序列,然后是逗号 (word1,word2,word3,)

在 python 中我会使用这种模式 "(\w+,)+",但是在 lua 中类似的模式(比如 (%w+,)+),return 只是 nil,因为 lua 模式中的括号表示完全不同的东西。

我希望你现在看到我的问题了。 有没有办法在 lua 中做重复模式?

如果您可以使用 LPeg,您可以轻松地做到这一点:

local lpeg = require "lpeg"
local str = "word1,word2,word3,,word4,word5,word6,       word7,"
local word = (lpeg.R"az"+lpeg.R"AZ"+lpeg.R"09") ^ 1
local sequence = lpeg.C((word * ",") ^1)

print(sequence:match(str))

word4,word5,word6 word7,

应该发生什么而言,您的示例不太清楚

这会给你任何逗号分隔的单词序列,没有白色 space 或空位置。

local text = "word1,word2,word3,,word4,word5,word6,       word7,"
-- replace any comma followed by any white space or comma
--- by a comma and a single white space
text = text:gsub(",[%s,]+", ", ")
-- then match any sequence of >=1 non-whitespace characters
for sequence in text:gmatch("%S+,") do
  print(sequence)
end

版画

word1,word2,word3,
word4,word5,word6,
word7,