3

我是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?
还是我需要为每个阶段编写模式?怎么做?

4

2 回答 2

4

您示例中的输入文本在短语之间没有任何明确的分隔符,因此使用正则表达式准确解析它很棘手。

,如果您添加像 a 这样的分隔符来分隔短语,这将更容易解析。

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 ]* "

请注意,此模式有一个警告,您要解析的字符串末尾需要有一个额外的空格,否则最后一个短语将不会被解析。

于 2013-06-15T00:59:02.827 回答
0
for k, v in s:gsub('%s*(%w+:)','\0%1'):gmatch'%z(%w+):(%Z*)'

– @Egor Skriptunoff
这种模式效果更好。

于 2013-06-17T16:31:44.517 回答