我正在用python解析一个300页的文档,我需要在Response元素之后找出ThisVal元素的属性值。 Response元素用于differentVals有很多点,因此我需要在找到Response元素后找出elements ThisVal属性值中的内容。

如果有帮助,令牌对于ThisVal是唯一的,但是在每个文档中都不同。

11:44:49 <ThisVal Token="5" />
11:44:49 <Response Token="5" Code="123123" elements="x.one,x.two,x.three,x.four,x.five,x.six,x.seven" />

最佳答案

您是否考虑过使用pyparsing?我发现它对于这种事情非常有用。以下是我为您解决问题的尝试。

import pyparsing as pp

document = """11:44:49 <ThisVal Token="5" />
11:44:49 <Response Token="5" Code="123123" elements="x.one,x.two,x.three,x.four,x.five,x.six,x.seven" />
"""

num = pp.Word(pp.nums)
colon = ":"

start = pp.Suppress("<")
end = pp.Suppress("/>")
eq = pp.Suppress("=")

tag_name = pp.Word(pp.alphas)("tag_name")

value = pp.QuotedString("\"")

timestamp = pp.Suppress(num + colon + num + colon + num)
other_attr = pp.Group(pp.Word(pp.alphas) + eq + value)

tag = start + tag_name + pp.ZeroOrMore(other_attr)("attr") + end

tag_line = timestamp + tag

thisval_found = False

for line in document.splitlines():

    result = tag_line.parseString(line)
    print("Tag: {}\nAttributes: {}\n".format(result.tag_name, result.attr))

    if thisval_found and tag_name == "Response":
        for a in result.attr:
            if a[0] == "elements":
                print("FOUND: {}".format(a[1]))

    thisval_found = result.tag_name == "ThisVal"

09-25 20:13