当我写这篇文章时,我意识到这个问题有两个部分,但是我认为我只真正停留在第一部分,因此第二部分仅提供上下文:
A部分:
我需要搜索 for 循环返回的每个值的内容(其中每个值都是一个 url),以查找以下内容:
href="/dir/Sub_Dir/dir/163472311232-text-text-text-text/page-n"
在哪里:
- 数字
163472311232
可以是任何长度(即它可以是5478
) -text-text-text-text
可以是任意数量的不同单词page-n
从哪里page-2
到任何数字- 其中匹配不会多次返回,即只返回唯一匹配,因此只会返回以下之一:
href="/dir/Sub_Dir/dir/5422-la-la/page-4
href="/dir/Sub_Dir/dir/5422-la-la/page-4
B部分:
所以逻辑是这样的:
list_of_urls = original_list
for url in list_of_urls:
headers = {'User-Agent' : 'Mozilla 5.0'}
request = urllib2.Request(url, None, headers)
url_for_re = urllib2.urlopen(request).read()
another_url = re.findall(r'href="(/dir/Sub_dir\/dir/[^"/]*)"', url_for_re, re.I)
file.write(url)
file.write('\n')
file.write(another_url)
file.write('\n')
我希望能给我类似的输出:
a.html
a/page-2.html
a/page-3.html
a/page-4.html
b.html
b/page-2.html
b/page-3.html
b/page-4.html
所以我的问题是(假设 B 部分的逻辑没问题):
用于 A 部分所需的正则表达式模式是什么?
我是 python 和正则表达式的新手,所以这将在一定程度上限制我对相对复杂的正则表达式建议等的理解。
更新:
在提出建议后,我尝试测试以下没有产生任何结果的正则表达式:
import re
content = 'href="/dir/Sub_Dir/dir/5648342378-text-texttttt-texty-text-text/page-2"'
matches = re.findall(r'href="/dir/Sub_Dir/dir/[0-9]+-[a-zA-Z]+-[a-zA-Z]+-[a-zA-Z]+-[a-zA-Z]+/page-([2-9]|[1-9][0-9]+)"', content, re.I)
prefix = 'http://www.test.com'
for match in matches:
i = prefix + match + '\n'
print i
解决方案:
我认为这是可行的正则表达式:
matches = re.findall(r'href="(/dir/Sub_Dir/dir/[^"/]*/page-[2-9])"', content, re.I)