我一直试图匹配这个正则表达式无济于事。我需要做的是做一个非贪婪的匹配,在这种情况下将最新的数字与特定的单词匹配:下一步:
以下是文字:
<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 :(得分:1)
^[\s\S]*>(\d+)<
你可以试试这个。抓住group 1
或capture 1
。看看演示。
https://regex101.com/r/sJ9gM7/28
这里你greedy match
最多number
。所以这将停留在><
之间最后一次出现的数字。.
默认情况下与新行不匹配,所以要么可以使用DOTALL
或[\s\S]
。
答案 1 :(得分:0)
使用正则表达式解析HTML通常是不明智的。该网站解释了原因并为您提供了所有主要语言的更好选择。
您尚未指定您正在使用哪种语言,但此正则表达式适用于大多数情况:
(\d+)(?:<[^>]+>[^<]*){2}Next
该号码将在第一个捕获组中。实际上,我要说的是,在{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
不如正则表达式那么优雅,但这是正确的方法。