3

私は次のような文字列の配列を持っています

urls_parts=['week', 'weeklytop', 'week/day']

そして、この文字列が URL に含まれているかどうかを監視する必要があるため、この例は、weeklytop 部分のみによってトリガーされる必要があります。

url='www.mysite.com/weeklytop/2'
for part in urls_parts:
    if part in url:
       print part

もちろん、「週」によってもトリガーされます。それを正しく行う方法は何ですか?

おっと、私の質問を少し具体的にさせてください。url='www.mysite.com/week/day/2' および part='week' の場合にトリガーしないコードが必要です.mysite.com/week/2' または 'www.mysite.com/week/2-second' など

4

5 に答える 5

5

これが私がやる方法です。

import re
urls_parts=['week', 'weeklytop', 'week/day']
urls_parts = sorted(urls_parts, key=lambda x: len(x), reverse=True)
rexes = [re.compile(r'{part}\b'.format(part=part)) for part in urls_parts]

urls = ['www.mysite.com/weeklytop/2', 'www.mysite.com/week/day/2', 'www.mysite.com/week/4']
for url in urls:
    for i, rex in enumerate(rexes):
        if rex.search(url):
            print url
            print urls_parts[i]
            print
            break

出力

www.mysite.com/weeklytop/2
weeklytop

www.mysite.com/week/day/2
week/day

www.mysite.com/week/4
week

長さで並べ替える提案は@Romanから来ました

于 2012-08-13T07:35:17.780 に答える
3

len最初の一致でbreakループごとにリストを並べ替えます。

于 2012-08-13T07:34:10.570 に答える
2

このようなことを試してください:

>>> print(re.findall('\\weeklytop\\b', 'www.mysite.com/weeklytop/2'))
['weeklytop']
>>> print(re.findall('\\week\\b', 'www.mysite.com/weeklytop/2'))
[]

プログラム:

>>> urls_parts=['week', 'weeklytop', 'week/day']
>>> url='www.mysite.com/weeklytop/2'
>>> for parts in urls_parts:
    if re.findall('\\'+parts +r'\b', url):
        print (parts)

出力:

weeklytop
于 2012-08-13T07:33:22.780 に答える
0

このように urls_parts を使用しないのはなぜですか?

 ['/week/', '/weeklytop/', '/week/day/']
于 2012-08-13T08:19:14.780 に答える
-1

コードを少し変更すると、この問題は解決します-

>>> for part in urls_parts:
        if part in url.split('/'):              #splitting the url string with '/' as delimiter
            print part

    weeklytop
于 2012-08-13T07:38:24.410 に答える