gpt4 book ai didi

Python 分组反向引用

转载 作者:太空狗 更新时间:2023-10-30 02:46:47 27 4
gpt4 key购买 nike

我正在清理一些 html 的输出这可能起源于所见即所得。为了理智起见,我想摆脱一堆空格式标签。

例如

<em></em> Here's some text <strong>   </strong> and here's more <em> <span></span></em>

感谢Regular-Expressions.info ,我有一个简洁的正则表达式,带有反向引用,可以一次展开一层

# Returns a string minus one level of empty formatting tags
def remove_empty_html_tags(input_string):
return re.sub(r'<(?P<tag>strong|span|em)\b[^>]*>(\s*)</(?P=tag)>', r'\1', input_string)

但是,对于 <em> <span></span></em>,我希望能够一次展开所有层。 ,并且可能有 5 层以上的嵌套空标签。

有没有一种方法可以将 backref 分组为 la (?:<?P<tagBackRef>strong|span|em)\b[^>]>(\s)*)+ (或其他东西)稍后与 (</(?P=tagBackRef>)+ 一起使用删除多个嵌套但匹配为空的 html标签?

为了后代:

这可能是一个 XY Question ,其中我希望用于我想要的结果的工具不是其他人会选择的工具。 Henry's answer回答了这个问题,但他和其他人会通过正则表达式指向一个 html 解析器来解析 html。 =)

最佳答案

使用 HTML 解析器(如 BeautifulSoup)更容易做到这一点,例如:

from bs4 import BeautifulSoup

soup = BeautifulSoup("""
<body>
<em></em> Here's some <span><strong>text</strong></span> <strong> </strong> and here's more <em> <span></span></em>
</body>
""")

for element in soup.findAll(name=['strong', 'span', 'em']):
if element.find(True) is None and (not element.string or not element.string.strip()):
element.extract()

print soup

打印:

<html><body>
Here's some <span><strong>text</strong></span> and here's more <em> </em>
</body></html>

如您所见,所有内容为空(或仅由空格组成)的 spanstrongem 标签都被删除了。

另见:

关于Python 分组反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883057/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com