使用 LPeg re 模块解析 XML 类型的文件
Parsing XML-type file with LPeg re module
我正在尝试学习 LPeg 的 re module
,这是一次非常有趣的经历,特别是因为官方文档非常好。
然而,有些主题似乎在那里没有得到很好的解释。例如 named group capture
结构:{:name: p :}
.
考虑下面的例子,我不明白为什么不匹配:
print(re.compile
[[item <- ('<' {:tag: %w+!%w :} '>' item+ '</' =tag '>') / %w+!%w]]
:match[[<person><name>James</name><address>Earth</address></person>]])
-- outputs nil
任何人都可以帮助我了解这里出了什么问题吗?我想了很多,看起来我真的错过了一些重要的东西。
这是一个迟到的答案,但您可以尝试以下模式
result = re.compile[[
item <- ({| %s* '<' {:tag: %w+ :} %s* '>' (item / %s* { (!(%s* '<') .)+ }) %s* '</' =tag '>' |})+
]]:match[[
<person>
<name>
James
</name>
<address>Earth</address>
</person>
]]
它使用表捕获来解析XML w/ 元素文本剥离的空格
tag = "person"
[1] = {
tag = "name"
[1] = "James"
}
[2] = {
tag = "address"
[1] = "Earth"
}
我正在尝试学习 LPeg 的 re module
,这是一次非常有趣的经历,特别是因为官方文档非常好。
然而,有些主题似乎在那里没有得到很好的解释。例如 named group capture
结构:{:name: p :}
.
考虑下面的例子,我不明白为什么不匹配:
print(re.compile
[[item <- ('<' {:tag: %w+!%w :} '>' item+ '</' =tag '>') / %w+!%w]]
:match[[<person><name>James</name><address>Earth</address></person>]])
-- outputs nil
任何人都可以帮助我了解这里出了什么问题吗?我想了很多,看起来我真的错过了一些重要的东西。
这是一个迟到的答案,但您可以尝试以下模式
result = re.compile[[
item <- ({| %s* '<' {:tag: %w+ :} %s* '>' (item / %s* { (!(%s* '<') .)+ }) %s* '</' =tag '>' |})+
]]:match[[
<person>
<name>
James
</name>
<address>Earth</address>
</person>
]]
它使用表捕获来解析XML w/ 元素文本剥离的空格
tag = "person"
[1] = {
tag = "name"
[1] = "James"
}
[2] = {
tag = "address"
[1] = "Earth"
}