1
结构如HTML的标签具有开口和封闭部,共享相同的标签,以匹配他们彼此。解析复杂匹配的分隔符
<tag> ... </tag>
我想使用pyparsing
库来捕获这些对和它们的内容。我知道如何指定一个标签。
from pyparsing import SkipTo, makeHTMLTags
open, close = makeHTMLTags("tag")
(open + SkipTo(close) + close).parseString("<tag> Tag content </tag>")
# yields ['tag', False, 'Tag content ', '</tag>']
我也知道,指定多个不同的标签时,他们每个人都需要一个专门的规则,以避免一个标签关闭另一个。因此,当一组标签是Or(("tag", "other"))
只是延长了前者的例子
from pyparsing import SkipTo, makeHTMLTags, Or
open, close = makeHTMLTags(Or(("tag", "other")))
(open + SkipTo(close) + close).parseString("<other><tag> Tag content </tag></other>")
# yields ['other', False, '<tag> Tag content ', '</tag>']
产生了不匹配的标签。解析器关闭开口<other>
与</tag>
。这可以通过为每个标签指定专用规则来修改。
from pyparsing import SkipTo, makeHTMLTags, Or
Or((
open + SkipTo(close) + close
for open, close in
map(makeHTMLTags, ("tag", "other"))
)).parseString("<other><tag> Tag content </tag></other>")
# yields ['other', False, '<tag> Tag content </tag>', '</other>']
现在我可以,例如,想找到的所有标签开始t
,从而寻找Word('t', alphas)
,而不是Or(("tag", "other", ...))
。如果要匹配的标记集合可能无限,我如何才能使标记匹配?