2015-03-31 29 views
1

我一直在試圖匹配這個正則表達式無濟於事。我需要做的是做一個非貪婪的比賽將在這種情況下,最新的數字匹配到一個特定的詞:下一篇:,嘗試匹配這個正則表達式

下面是全文:

<a href="/forum/view-forum/standard-trading-shops/page/1">Prev</a> 
<a href="/forum/view-forum/standard-trading-shops/page/1">1</a> 
<a class="current" href="/forum/view-forum/standard-trading-shops/page/2">2</a> 
<a href="/forum/view-forum/standard-trading-shops/page/3">3</a> 
<a href="/forum/view-forum/standard-trading-shops/page/4">4</a> 
<span class="separator">...</span><a href="/forum/view-forum/standard-trading-shops/page/3029">3029</a> 
<a href="/forum/view-forum/standard-trading-shops/page/3030">3030</a> 
<a href="/forum/view-forum/standard-trading-shops/page/3">Next</a> 

我需要找到3030作爲我這個答案是這段經文中的最高數字。

我累的事情:

(/d)+.*?Next 

然而,這總是匹配(1)一,二號線,而不是最高的3030號的第一個數字這是我的理解是.*?確實非貪婪匹配該應該匹配最新的事件。

任何人都可以幫助我嗎? 感謝 中號

+0

你只希望它抓住3030,而不是3029的前行? – eirikdaude 2015-03-31 07:24:35

回答

1
^[\s\S]*>(\d+)< 

您可以嘗試this.Grab的group 1capture 1。看到演示。

https://regex101.com/r/sJ9gM7/28

在這裏,你做一個greedy match高達一number。那麼這將在數><之間的最後一次出現停止。 .默認情況下不會匹配換行符,因此可以使用DOTALL[\s\S]

+0

我會將您的答案標記爲正確,因爲您的答案少於其他答案。很好的解釋謝謝! – Martino 2015-03-31 07:25:03

+0

@Martino歡迎:) – vks 2015-03-31 07:26:06

0

解析HTML與正則表達式通常是不明智的。本網站解釋了爲什麼,併爲您提供所有主要語言的更好選擇。

您還沒有指定您正在使用哪種語言,但這個表達式在大多數情況下工作:

(\d+)(?:<[^>]+>[^<]*){2}Next 

Regular expression visualization

Debuggex Demo

數量將在第一拍攝組。實際上我是說,在數字應該是{2}的實例<然後任何字符不是>直到>和可選的某些字符不是<直到下一個實例。這兩個<something>的實例應該是Next這個詞。

0

使用BeautifulSoup是用於解析HTML的首選方法。

s = """<a href="/forum/view-forum/standard-trading-shops/page/1">Prev</a> 
<a href="/forum/view-forum/standard-trading-shops/page/1">1</a> 
<a class="current" href="/forum/view-forum/standard-trading-shops/page/2">2</a> 
<a href="/forum/view-forum/standard-trading-shops/page/3">3</a> 
<a href="/forum/view-forum/standard-trading-shops/page/4">4</a> 
<span class="separator">...</span><a href="/forum/view-forum/standard-trading-shops/page/3029">3029</a> 
<a href="/forum/view-forum/standard-trading-shops/page/3030">3030</a> 
<a href="/forum/view-forum/standard-trading-shops/page/3">Next</a>""" 

from bs4 import BeautifulSoup 

soup = BeautifulSoup(s) 
text = soup.text.splitlines() 
index = text.index('Next') 
result = text[index-1] 

>>> print result 
3030 

不優雅的正則表達式,但它是這樣做的正確方法。

+0

據我所知,這在技術上是正確的做法。我嘗試了美麗的湯,但它沒有正則表達式那麼快(如果儘可能以最少步驟完成)。我的應用程序非常流程密集,這使得此方法在這種情況下無法提供幫助。 – Martino 2015-03-31 12:35:28