3

我有一个字符串数组,比如

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

而且我需要监视在我的 url 中包含这个字符串,所以这个例子只需要由 weektop 部分触发:

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

但它当然也是由“周”触发的。什么是正确的方法?

OOps,让我稍微说明一下我的问题。我需要在 url='www.mysite.com/week/day/2' 和 part='week' 时不触发该代码唯一需要触发的 url 是当 part='week' 和 url='www .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 回答