簡體   English   中英

正則表達式-匹配可選組

[英]RegEx - Match optional groups

我知道RegEx並不是抓取HTML的最好方法,但就是這樣...我有一些類似的東西:

<td> Writing: <a href="creator.php?c=CCh">Carlo Chendi</a>  Art: <a href="creator.php?c=LBo">Luciano Bottaro</a> </td>

我需要匹配寫作和藝術部分。 但這並不是說它們在那里,並且可能還有其他部分,例如墨水和鉛筆……

我該怎么做呢? 我需要使用純正則表達式,沒有其他Python庫。

也許有兩種模式可以識別。

  1. 您的關鍵字存在於<td> ... </ td>
  2. 您的關鍵字后面緊跟<a> ... </a>部分

所以..首先提取<td> s中的所有內容...(偽代碼)

while ( match( "<td[^>]*>(.*?)</td[^>]*>" ) ) {
    inner = match[1];
    ...
}

(.*?)表示非貪婪地匹配,即匹配可能的最小值。 否則,您將匹配從第一個<td>最后一個 </td> (而不是下一個</td> )的所有內容。

然后,您可以繼續進行inner處理!

regex = re.compile("(\w+):")
regex.findall(yourString); // returns an array of matching elements

你可以在這里測試

PS:我強烈建議你去通過這個

我最終創建了這個:

(Art:|Pencils:|Ink:|Writing:){0,4}.<a href="creator\.php\?c=[^">]*?\"\>(?P<Name>.*?)\</a\>

看起來像在工作...也許可以拋光一點。 我是個入門者。

您可以使用?匹配正則表達式中的可選內容。 在可選部分之后。 將匹配0或1次出現的子表達式。

盡管有我之前的回答,但我還是改變了主意,不想擁有任何選擇/替代方案,而將所有選擇都獲得了。 因此,這意味着必須捕獲TD標簽內部的所有內容並將其正確分類。 我需要創建一個可選的捕獲組,以便無論布局如何,我仍然可以檢索內容。 它應該與此一起工作,即:

<td>   Art: <a href="creator.php?c=GPe">Giuseppe Perego</a> </td>
<td> Writing: <a href="creator.php?c=CCh">Carlo Chendi</a>  Art: <a href="creator.php?c=LBo">Luciano Bottaro</a> </td>
<td>  Pencils: <a href="creator.php?c=JB">Jack Bradbury</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td>  Pencils: <a href="creator.php?c=JB">Jack Bradbury</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Writing: <a href="creator.php?c=DKi">Dick Kinney</a> Pencils: <a href="creator.php?c=TS">Tony Strobl</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td>  Pencils: <a href="creator.php?c=JB">Jack Bradbury</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Writing: <a href="creator.php?c=BKa">Bob Karp</a> Pencils: <a href="creator.php?c=AT">Al Taliaferro</a> Ink: <a href="creator.php?c=AH">Al Hubbard</a> </td>    
<td> Writing: <a href="creator.php?c=DKi">Dick Kinney</a> Pencils: <a href="creator.php?c=TS">Tony Strobl</a> Ink: <a href="creator.php?c=SSt">Steve Steere</a> </td>
<td> Writing: <a href="creator.php?c=VLo">Vic Lockman</a>  Art: <a href="creator.php?c=KWr">Kay Wright</a> </td>
<td> Writing: <a href="creator.php?c=MGa">Michele Gazzarri</a>  Art: <a href="creator.php?c=GPe">Giuseppe Perego</a> </td>

我建立:

<td>\ {1,3}(?:(?:Writing: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>).*?)?(?:(?:Pencils: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>\ ))?(?:(?:Ink: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>))?(?:(?:Art: <a href="creator\.php\?c=[^>"]*?">(.*?)?</a>))?\ {1,3}</td>

看起來好像正在工作!

我真的很感謝有人檢查並驗證我的努力。

暫無
暫無

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

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