试图匹配这个正则表达式

时间:2015-03-31 07:13:59

标签: regex

我一直试图匹配这个正则表达式无济于事。我需要做的是做一个非贪婪的匹配,在这种情况下将最新的数字与特定的单词匹配:下一步:

以下是文字:

<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.我的理解是.*?执行非贪婪的匹配,它应匹配最新的匹配。

任何人都可以帮助我吗? 谢谢 中号

3 个答案:

答案 0 :(得分:1)

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

你可以试试这个。抓住group 1capture 1。看看演示。

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

这里你greedy match最多number。所以这将停留在><之间最后一次出现的数字。.默认情况下与新行不匹配,所以要么可以使用DOTALL[\s\S]

答案 1 :(得分:0)

使用正则表达式解析HTML通常是不明智的。该网站解释了原因并为您提供了所有主要语言的更好选择。

您尚未指定您正在使用哪种语言,但此正则表达式适用于大多数情况:

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

Regular expression visualization

Debuggex Demo

该号码将在第一个捕获组中。实际上,我要说的是,在{2} <>个实例后,>之前的任何字符都不是<,而且可能是某些字符不是<something> t Next直到下一个实例。在{{1}}的这两个实例之后应该是单词{{1}}。

答案 2 :(得分: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

不如正则表达式那么优雅,但这是正确的方法。