Skip to main content
 首页 » 编程设计

python之在运行时生成 python 正则表达式以匹配从 'n' 到无限的数字

2025年05月04日30oomusou

我正在使用 scrapy 抓取网站并从中提取数据,scrapy 使用基于正则表达式的规则来检查是否必须解析页面,或者必须遵循链接。

我正在为我的蜘蛛实现一个恢复功能,这样它就可以从上次访问的页面继续抓取。为此,我在蜘蛛启动时从数据库中获取了最后一个关注的链接。

我的网站 url 看起来像 http://foobar.com/page1.html,所以通常情况下,规则的正则表达式会像这样遵循每个链接,类似于 /page\d+\.html.

但是我如何编写一个正则表达式来匹配,例如,第 15 页或更多?另外,由于我事先不知道起点,我怎么能在运行时生成这个正则表达式?

请您参考如下方法:

为什么不把页码分组,然后检查是否合格:

>>> m=re.match("/page(\d+)\.html","/page18.html") 
>>> if m: 
    ID=int(m.groups()[0]) 
>>> ID > 15 
True 

或者更具体地说是您的要求:

>>> def genRegex(n): 
    return ''.join('[' + "0123456789"[int(d):] + ']' for d in str(n)) 
 
>>> genRegex(123) 
'[123456789][23456789][3456789]'