Lua文本解析,空格处理

我是 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?

或者我需要为每个阶段编写模式吗?如何实现?

点赞
用户234175
用户234175

在你的例子中,输入文本中没有明确的短语分隔符,因此使用正则表达式对其进行准确解析比较棘手。

如果你添加一个分隔符符号例如,来分隔短语,那么解析就会变得更加容易。

短语1:A B,短语2:A B,短语3:W O R D,短语4:WORD

那么你可以使用如下模式进行解析:

s = "短语1:A B,短语2:A B,短语3:W O R D,短语4:WORD"

for k, v in s:gmatch "(短语%d+):([^,]+)" do
    print(k, v)
end

输出结果如下:

短语1 A B
短语2 A B
短语3 W O R D
短语4 WORD

如果不可能放宽上述限制,你可以尝试以下模式:

s:gmatch "短语%d+:%w[%w ]* "

需要注意的是,此模式有一个小问题,即你正在解析的字符串需要在末尾多加一个空格,否则最后一个短语将无法解析。

2013-06-15 00:59:02
用户1366988
用户1366988
对于 s 中所有匹配模式 '%s*(%w+:)' 的 k, v 对,
可以使用 '\0%1' 正确运行 gsub 来查找,
然后使用 gmatch 函数来获取。

—— @Egor Skriptunoff

这个模式更好一些。

2013-06-17 16:31:44