lua匹配重复模式

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

在Python中,我会使用此模式"(\w+,)+",但是在lua中类似的模式(如(%w+,)+)会返回nil,因为lua模式中的括号意味着完全不同的事情。

我希望现在你明白我的问题了。 有没有一种在lua中进行重复模式的方法?

点赞
用户4984564
用户4984564

如果您有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))
2020-07-07 16:55:27
用户2858170
用户2858170

你的示例不太清楚,不太清楚 word4,word5,word6 word7 应该怎样处理。

以下代码将给你任意多个逗号分隔的单词,不存在空格或空白位置。

local text = "word1,word2,word3,,word4,word5,word6,       word7,"
-- 将任何后面存在空格或逗号的逗号替换为一个逗号和一个空格
text = text:gsub(",[%s,]+", ", ")
-- 然后匹配任何序列,长度大于等于1的非空白字符
for sequence in text:gmatch("%S+,") do
  print(sequence)
end

输出:

word1,word2,word3,
word4,word5,word6,
word7,
2020-07-07 17:17:47