これを書いていると、この質問には 2 つの部分があることに気付きますが、最初の部分だけに固執していると思います。したがって、2 番目の部分は文脈のためにのみ提供されます。
パート 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のロジックがOKであると仮定して)です:
パート 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)