簡體   English   中英

如何讓這個正則表達式只找到第一個匹配項

[英]how to make this regex only find the first match

我知道使用 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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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

雖然許多人似乎對您選擇使用正則表達式執行此任務感到不滿,但我認為這對於您的特定目標來說似乎並不太難,並且會為您的要求提供實際答案。

import re
a = html
b = re.findall('<span class="card-count">(.*?)</span>',a)
print(b[0])

該正則表達式應該在列表中提供您的卡片計數類的內容,並使用第一個索引僅檢索您希望正則表達式找到的匹配項。

顯然,這對於其他用例來說效果不佳,但正如您似乎知道,您只希望在 html 文檔中第一次出現,列表包含所有這些並不重要,即使它們在另一個 div 標簽中等等。

正如其他人所說,我不明白您為什么不為此使用常規 html 解析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM