我是 Lua 的新手。我想像这样解析文本
Phase1:A B Phase2:A B Phase3:W O R D Phase4:WORD
到
Phase1 Phase2 Phase3 Phase4
A A B W O R D WORD
我用了string.gmatch(s, "(%w+):(%w+)")
,只能得到
Phase1 Phase2 Phase3 Phase4
A A W WORD
我怎样才能找回丢失的 B、O、R、D?
还是我需要为每个阶段编写模式?如何做到这一点?
最佳答案
您示例中的输入文本在短语之间没有任何明确的分隔符,因此使用正则表达式准确解析它很棘手。
如果您添加像 ,
这样的分隔符来分隔短语,这将更容易解析。
Phrase1:A B, Phrase2:A B, Phrase3:W O R D,Phrase4:WORD
然后您可以使用此模式解析它:
s = "Phrase1:A B, Phrase2:A B, Phrase3:W O R D,Phrase4:WORD"
for k, v in s:gmatch "(Phrase%d+):([^,]+)" do
print(k, v)
end
输出:
Phrase1 A B
Phrase2 A B
Phrase3 W O R D
Phrase4 WORD
如果无法放宽上述约束,可以试试这个模式:
s:gmatch "Phrase%d+:%w[%w ]* "
请注意,此模式有一个警告,您正在解析的字符串末尾需要有一个额外的空格,否则最后一个短语将不会被解析。
关于regex - Lua文本解析、空格处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17118917/