【问题标题】:Python split tags based on regular expressionPython基于正则表达式拆分标签
【发布时间】:2015-10-14 15:51:22
【问题描述】:

我想将以下标签<b size=5 alt=ref>拆分如下:

Open tag: b
Parm: size=5
Parm: alt=ref

但是,我尝试使用以下代码将标记拆分为组,但它不起作用:

temp = '<b size=5 alt=ref>'
matchObj = re.search(r"(\S*)\s*(\S*)", temp)
print 'Open tag: ' + matchObj.groups()

我的计划是将标签分成几组,然后将第一组打印为开放标签,其余的打印为 Parm。您能否提出任何有助于我解决此问题的想法?

请注意,我从 html 文件中读取标签,但我在这里提到了一个打开标签的示例,并展示了我卡住的部分代码。

谢谢

【问题讨论】:

  • 您没有使用 HTML 解析器有什么原因吗?

标签: python regex


【解决方案1】:
tag_names = ["Open tag:","Parm:","Parm:"]
import re  
# split on <,>,white space, and remove empty strings at
# the start and at the end of the resulting list. 
tags = re.split(r'[<> ]','<b size=5 alt=ref>')[1:-1]
# zip tag_names list and with list of tags
print(list(zip(tag_names, tags)))

[('Open tag:', 'b'), ('Parm:', 'size=5'), ('Parm:', 'alt=ref')]

【讨论】:

  • 虽然这个答案可能是正确的,但请添加一些解释。传递底层逻辑比仅仅提供代码更重要,因为它可以帮助 OP 和其他读者自己解决这个问题和类似问题。
【解决方案2】:
>>> import re
>>> temp = '<b size=5 alt=ref>'
>>> resList  = re.findall("\S+", temp.replace("<","").replace(">",""))
>>> myDict = {}
>>> myDict["Open tag:"] = [resList[0]]
>>> myDict["Parm:"] = resList[1:]
>>> myDict
{'Open tag:': ['b'], 'Parm:': ['size=5', 'alt=ref']}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 2020-02-07
    • 2010-10-16
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多