Lua模式文本分割

再次需要Lua模式的帮助。假设我有以下字符串:

<c> block - 应该匹配 cblock

<category>material - 应该匹配 categorymaterial

decorative - 如果没有 <> 块,则应返回原始值(或空值)。

我不关心空格,所以内置的修剪功能会很好。

我已经设法创建了 (<%a>)([^>]+),但它在第一个示例中返回了 <c>block,这不是我想要的。

点赞
用户3832970
用户3832970

在你的模式中的 (<%a>) 部分捕获了角括号,因此它们将出现在捕获的值中。 %a 仅匹配一个字母字符,因此你需要在它后面添加 + 量词,以匹配一个或多个字母字符。

使用

<(%a+)>%s*([^>]+)

%s*将匹配0个或多个空白字符,并在第2组之外。示例使用:

local function splitString(text)
    return string.match(text, "<(%a+)>%s*([^>]+)")
end

print(splitString("<c> block"))           -- c  block
print(splitString("<category>material"))  -- category   material
print(splitString("decorative"))          -- nil
2017-09-12 22:01:11