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,
我需要以某种方式封装 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,