【发布时间】:2013-09-23 20:26:39
【问题描述】:
我正在清理一些可能源自所见即所得的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 分组为 (?:<?P<tagBackRef>strong|span|em)\b[^>]>(\s)*)+(或其他东西),并在稍后与 (</(?P=tagBackRef>)+ 一起使用以删除多个嵌套但匹配的空 html 标签?
为了后代:
这可能是XY Question,其中我希望用于我想要的结果的工具不是其他人会选择的工具。 Henry's answer 回答了这个问题,但他和其他所有人都会将您指向一个 html 解析器而不是正则表达式来解析 html。 =)
【问题讨论】:
-
这就是为什么人们告诉你不要使用正则表达式来解析 HTML。请改用 HTML 解析器。
-
你需要一个嵌套层的硬上限......并且每个潜在层的正则表达式变得更长(并且更复杂)
-
@MartijnPieters 还有什么,在树上寻找
re.match('^\s*$', innerText)? -
@Michael:至少可以使用 BeautifulSoup。
标签: python html regex html-parsing