python中的字符串比较

python中的字符串比较,python,Python,我有一个字符串数组,比如 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.

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

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'时不触发该代码
唯一需要触发的url是当part='week'和url='www.mysite.com/week/2'或'www.mysite.com/week/2-second'时,例如

尝试以下操作:

>>> 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

按照
len
break
在第一次匹配时从循环中对列表进行排序。

我会这样做

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建议按长度排序,对代码稍加修改即可解决此问题-

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

    weeklytop

为什么不使用像这样的部件呢

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

使用urllib.urlparse()解析URL,将遍历拆分为多个部分,然后逐个字符串进行比较。这是家庭作业吗?你的
url\u部分中的每一部分都有“周”的模式,你怎么能指望计算机在不标记
url
的情况下就能分辨出来呢?您至少需要定义单词边界,然后才能按照上面的方式进行匹配…或者这样做regexIt不是我,但例如,
'week/day'
永远无法以这种方式找到。我使用这种方式,它只是一个示例