Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析复杂匹配分隔符_Python_Html_Pyparsing - Fatal编程技术网

Python 解析复杂匹配分隔符

Python 解析复杂匹配分隔符,python,html,pyparsing,Python,Html,Pyparsing,像HTML标记这样的结构有一个开始和结束部分,共享一个相同的标记以使它们相互匹配 。。。 我想使用pyparsing库捕获这些对及其内容。我知道如何指定单个标记 从pyparsing导入SkipTo,makeHTMLTags 打开,关闭=生成HTMLTAGS(“标记”) (打开+跳过(关闭)+关闭).parseString(“标记内容”) #产生['tag',False,'tag content',''] 我还知道,当指定多个不同的标记时,每个标记都需要一个专用规则来避免一个标记关闭另一个标

像HTML标记这样的结构有一个开始和结束部分,共享一个相同的标记以使它们相互匹配

。。。
我想使用
pyparsing
库捕获这些对及其内容。我知道如何指定单个标记

从pyparsing导入SkipTo,makeHTMLTags
打开,关闭=生成HTMLTAGS(“标记”)
(打开+跳过(关闭)+关闭).parseString(“标记内容”)
#产生['tag',False,'tag content','']
我还知道,当指定多个不同的标记时,每个标记都需要一个专用规则来避免一个标记关闭另一个标记。因此,当标记集是
或((“tag”,“other”)
时,只需扩展前一个示例

从pyparsing导入SkipTo、makeHTMLTags或
打开、关闭=生成HTMLTAGS(或((“标记”、“其他”))
(打开+跳过(关闭)+关闭).parseString(“标记内容”)
#产生['other',False,'Tag content','']
产生不匹配的标记。解析器使用
关闭打开的
。这可以通过为每个标签指定专用规则来修改

从pyparsing导入SkipTo、makeHTMLTags或
或((
打开+跳过(关闭)+关闭
开放式,封闭式
映射(makeHTMLTags,(“标记”,“其他”))
)).parseString(“标记内容”)
#产生['other',False,'Tag content','']

例如,现在我想查找所有以
t
开头的标记,从而搜索
Word('t',alphas)
,而不是
或((“标记”,“其他”,…)
)。当要匹配的标记集可能无限大时,如何使标记匹配?

我不熟悉pyparsing模块,但您的问题似乎可以通过以下方法解决。下面是我使用lxml的示例代码:

# -*- coding: utf-8 -*-
from lxml import etree


def pprint(l):
    for i, tag in enumerate(l):
        print 'Matched #%s: tag name=%s, content=%s' % (i + 1, tag.tag, tag.text)


def main():
    # Finding all <tag> tags
    pprint(etree.HTML('<tag>Tag content</tag>').xpath("//tag"))

    # Finding all stags starts with "t"
    pprint(etree.HTML('<tag>tag1 content</tag><tag2>tag2 conent</tag2><other>other</other>').xpath(
        "//*[starts-with(local-name(), 't')]"))


if __name__ == '__main__':
    main()

希望对您有所帮助。

我不熟悉pyparsing模块,但您的问题似乎可以通过解决。下面是我使用lxml的示例代码:

# -*- coding: utf-8 -*-
from lxml import etree


def pprint(l):
    for i, tag in enumerate(l):
        print 'Matched #%s: tag name=%s, content=%s' % (i + 1, tag.tag, tag.text)


def main():
    # Finding all <tag> tags
    pprint(etree.HTML('<tag>Tag content</tag>').xpath("//tag"))

    # Finding all stags starts with "t"
    pprint(etree.HTML('<tag>tag1 content</tag><tag2>tag2 conent</tag2><other>other</other>').xpath(
        "//*[starts-with(local-name(), 't')]"))


if __name__ == '__main__':
    main()
希望能有帮助