我有一个这样的 XML 文件结构:
<word id="15" pos="SS">
<token>infarto</token>
<lemmas>infarto</lemmas>
</word>
<word id="16" pos="AS">
<token>miocardico</token>
<lemmas>miocardico</lemmas>
</word>
<word id="17" pos="AS" annotated="head">
<token>acuto</token>
<lemmas>acuto</lemmas>
</word>
<word id="18" pos="E">
<token>in</token>
<lemmas>in</lemmas>
</word>
<word id="19" pos="SS">
<token>corso</token>
<lemmas>corso</lemmas>
</word>
我正在尝试做的是获取围绕具有单词 id 17 的单词的“pos”和“token”的值(annotated = “head” one)。
这对于单词 17 之后的所有匹配都没有问题。
(pos=")(.+)(")(\s\S+?)("head")([\s\S]+?)(>)(\w+?)(<+)([\S\s]+?)(pos=")(.+)(")([\s\S]+?) (token>)(.+)(<)([\s\S]+?)
这为我提供了我想要的所有信息,如果我想扩展,我可以添加
(pos=")(.+)(")([\s\S]+?)(token>)(.+)(<)([\s\S]+?)
到最后。它不漂亮,但它有效。
现在当我想去另一个方向时,我完全被难住了
(pos=")(.+)(")([\s\S]+?)(token>)(.+)(<)([\s\S]+?)(pos=")(.+)(")(\s\S+?)("head")
它不是只匹配第 16 个单词的信息(“注释头”前面的第一个),而是匹配之前的所有信息(第 15 个单词、第 14 个单词、第 13 个单词等)。
我错过了什么?
PS 遗憾的是,使用 XML 解析器不是一种选择。