【发布时间】:2016-02-03 12:14:54
【问题描述】:
我尝试在 HTML 文件上使用 "<.+>\s*(.*?)\s*<\/?.+>"。以下是我使用的Python代码
import re
def recursiveExtractor(content):
re1='(<.+>\s*(.+?)\s*<\/?.+>)'
m = re.findall(re1,content)
if m:
for (id,item) in enumerate(m):
text=m[id][1]
if text:print text,"\n"
f = """
<div class='a'>
<div class='b'>
<div class='c'>
<button>text1</button>
<div class='d'>text2</div>
</div>
</div>
</div>
"""
recursiveExtractor(f)
但它会跳过一些文本,因为 HTML 是嵌套的,并且正则表达式会从匹配部分的末尾重新开始搜索。
对于上述输入, 输出是
<div class='b'>
<div class='d'>text2</div>
</div>
但预期的输出是:
text1
text2
编辑: 我读到 HTML 不是常规语言,因此无法解析。据我了解,无法解析 .* (即使用相同的结束标签)。 但我需要的是任何标签之间的文本,例如 text1 text2 text3 所以我对 "text1","text2","text3" 的列表很好
【问题讨论】:
-
强制链接再次警告使用正则表达式解析 HTML:*.com/a/1732454/3923281
-
@ajcr 我不需要解析 html 结构。据我了解,无法解析.*(即具有相同的结束标签)。但我需要的是任何标签之间的文本,例如text1 text2 text3所以我对 "text1","text2","text3"
-
嗯,好的——那么你也许可以以这种更有限的方式使用正则表达式。感谢您的澄清!