【发布时间】:2017-01-26 09:45:56
【问题描述】:
我知道使用 Regex 解析 html 代码在技术上是不正确的,但在开始这个项目时发现这一点太远了(我已经说过我将使用 Regex 为时已晚无法返回的一些课程作业现在开始)
我正在尝试制作一个 python 程序,它需要一个 html 文档,去掉 card-count 类之后包含的数字,然后将它们附加到一个列表中,问题是它似乎在运行时没有找到第一个匹配项要找到第一个和所有其他与第一个相同的,依此类推,这里是一些示例 html 和我的正则表达式:
<span class="card-count">1</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BGarruk%5D+%5BRelentless%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=Garruk+Relentless" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">Garruk Relentless</a></span>
</span>
<span class="row">
<span class="card-count">2</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BJace,%5D+%5Bthe%5D+%5BMind%5D+%5BSculptor%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=Jace%2C+the+Mind+Sculptor" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">Jace, the Mind Sculptor</a></span>
</span>
</div>
<div class="sorted-by-creature clearfix element">
<h5>Creature (16)</h5>
<span class="row">
<span class="card-count">4</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BDeathrite%5D+%5BShaman%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=Deathrite+Shaman" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">Deathrite Shaman</a></span>
</span>
<span class="row">
<span class="card-count">4</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BNoble%5D+%5BHierarch%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=Noble+Hierarch" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">Noble Hierarch</a></span>
</span>
<span class="row">
<span class="card-count">4</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BStoneforge%5D+%5BMystic%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=Stoneforge+Mystic" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">Stoneforge Mystic</a></span>
</span>
<span class="row">
<span class="card-count">4</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BTrue-Name%5D+%5BNemesis%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=True-Name+Nemesis" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">True-Name Nemesis</a></span>
</span>
</div>
<div class="sorted-by-sorcery clearfix element">
<h5>Sorcery (3)</h5>
<span class="row">
<span class="card-count">3</span>
<span class="card-name"><a href="http://gatherer.wizards.com/Pages/Search/Default.aspx?name=+%5BPonder%5D" data-src="http://gatherer.wizards.com/Handlers/Image.ashx?type=card&name=Ponder" data-mp4="http://magic.wizards.com/" data-webm="http://magic.wizards.com/" data-gif="http://magic.wizards.com/" class="deck-list-link">Ponder</a></span>
</span>
而python代码是:
card_number_list=[]
number_of_cards=int(0)
#find out how many of x cards there are in the deck
def card_number_regex(card_number_list):
global number_of_cards
global html
number_in_set= re.search("card-count.*",html)
get_rid= re.search("card-count.*",html).group(0)
html=html.replace(get_rid,"")
number_in_set=number_in_set.group(0)
html=html.replace(number_in_set, "")
number_in_set=number_in_set.replace('card-count">',"")
number_in_set=number_in_set.replace('</span>', "")
card_number_list.append(number_in_set)
number_in_set_int=int(number_in_set)
print(number_in_set_int)
number_of_cards=(number_of_cards+number_in_set_int)
return number_of_cards
while number_of_cards<75:
card_number_regex(card_number_list)
我运行它时得到的输出是 1 2 4 3
【问题讨论】:
-
不要使用正则表达式解析 HTML...
-
来自 regex 标签:" 请求 HTML、JSON 等正则表达式往往会遇到负面反应。如果有解析器,请改用它。"
标签: python regex python-3.x