我尝试在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所以我可以使用&#34; text1&#34;,&#34; text2&#34;,&#34; text3&#34;
答案 0 :(得分:5)
为什么不这样做:
import re
f = """
<div class='a'>
<div class='b'>
<div class='c'>
<button>text1</button>
<div class='d'>text2</div>
</div>
</div>
</div>
"""
x = re.sub('<[^>]*>', '', f) # you can also use re.sub('<[A-Za-z\/][^>]*>', '', f)
print '\n'.join(x.split())
这将有以下输出:
text1
text2