【问题标题】:Regex for template tag with attributes带有属性的模板标签的正则表达式
【发布时间】:2011-01-08 05:26:39
【问题描述】:

在阅读完所有这些帖子后,我还没有找到答案,所以我希望你们中的一个重击正则表达式的人可以帮助我。我正在尝试从以下字符串格式中分离出标签名称和任何属性:

{TAG:TYPE attr1="foo" attr2="bar" attr3="zing" attr4="zang" attr5="zoom" ...}

注意:在上面的示例中,TAG 将始终相同,TYPE 将是几个预设字符串之一(例如 share、print、display 等)。 TAG 和 TYPE 仅用于示例,但实际不区分大小写。

【问题讨论】:

    标签: regex attributes tags


    【解决方案1】:

    暂时,让我们假设您的属性名称和值,以及您的 TAG 和 TYPE,都是严格的字母数字。如果您可以在这些字符串中包含 " 或 =,则解析会变得更加混乱(甚至可能不是常规的)。

    有了这些注意事项,下面是一个可以完成工作的 python 正则表达式:

    >>> parse_regex=r'\{(?P<tag>\w+):(?P<type>\w+)(?P<attrs>(\s+\w+=\"\w+\")*)\}'
    >>> m = re.match(parse_regex, str)
    >>> m.group('tag')
    'TAG'
    >>> m.group('type')
    'TYPE'
    >>> m.group('attrs')
    ' attr1="foo" attr2="bar" attr3="zing" attr4="zang" attr5="zoom"'
    

    此时,您需要将属性清理为友好的数据结构。由于可能有任意多个,因此在此阶段不使用正则表达式会更方便(并且同样有效)。

    >>> [attr_str.split('=') for attr_str in m.group('attrs').split()]
    [['attr1', '"foo"'], ['attr2', '"bar"'], ['attr3', '"zing"'], ['attr4', '"zang"'], ['attr5', '"zoom"']]
    

    【讨论】:

    • 谢谢大卫,这很有帮助!我能够进行一些小调整并使其正常工作。注意:我必须使用空格和一些附加字符(如 (.,\?;&) 等...
    猜你喜欢
    • 2011-07-27
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    相关资源
    最近更新 更多