想象一下,我有一个巨大的xml文件:
.
.
.
<div class="span9">
<div class="results-count">AAA</div>
<div class="AA">
<div class="A"><a href="/TEST">BBB</a>
</div>
<div class="BB"><span>CCC</span><br/><a href="/TEST1" class="B">DDD</a>
<div></div><span>EEE</span><br/><img src="TEST2" title="C"/><a href="/TEST3" class="D">FFF</a>,
<a href="/TEST4" class="E">GGG</a>
<div class="clear"></div><a href="/TEST5" class="details">Details</a>
</div>
<pre>HHH</pre>
<div class="clear"></div>
.
.
.
我想说python向我显示<div class="results-count">AAA</div>
和<div class="clear"></div>
之间的所有行。
注意:您在我的示例xml文件中看到的内容在我的巨大xml文件中是重复的。所以我想将所有这些段显示为我的python脚本的输出。
答案 0 :(得分:0)
试试这个正则表达式:
<div class="results-count">[^<]+?</div>(.+?)<div class="clear"></div>
带有标志的:re.MULTILINE | re.IGNORECASE | re.DOTALL
DEMO - one block
DEMO - multiple blocks
请注意,正则表达式会在找到的第一个<div class="clear"></div>
处停止。
以下是Python中的示例代码:
import re
p = re.compile(ur'<div class="results-count">[^<]+?</div>(.+)<div class="clear"></div>', re.MULTILINE | re.IGNORECASE | re.DOTALL)
test_str = u"<div class=\"span9\">\n <div class=\"results-count\">AAA</div>\n<div class=\"AA\">\n <div class=\"A\"><a href=\"/TEST\">BBB</a>\n </div>\n <div class=\"BB\"><span>CCC</span><br/><a href=\"/TEST1\" class=\"B\">DDD</a>\n <div></div><span>EEE</span><br/><img src=\"TEST2\" title=\"C\"/><a href=\"/TEST3\" class=\"D\">FFF</a>,\n<a href=\"/TEST4\" class=\"E\">GGG</a>\n <div class=\"clear\"></div><a href=\"/TEST5\" class=\"details\">Details</a>\n </div>\n <pre>HHH</pre>\n <div class=\"clear\"></div>"
re.findall(p, test_str)
答案 1 :(得分:0)
你可以试试这个 https://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.XML
也许HTML Parser。
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print "Start Tag (start_tag):", tag
def handle_endtag(self, tag):
print "End Tag(end_tag) :", tag
def handle_data(self, data):
print "Content :", data
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')