2012-08-13 76 views
3

比较我有一个字符串像字符串在python

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

一个数组,我需要监测纳入这个串在我的网址,所以这个例子就需要通过只weeklytop部分被触发:

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' 例如

+3

使用'regex'为此。 – 2012-08-13 07:28:36

+1

使用urllib.urlparse()解析URL,将遍历拆分为多个部分,然后通过字符串比较字符串。这是功课吗? – 2012-08-13 07:29:16

+0

你的'url_parts'中每一个都有模式“星期”,你怎么能期望计算机可以分开而不用标记'url'? 您需要至少定义字边界,然后才能以上述方式进行匹配......或者执行正则表达式 – Yang 2012-08-13 07:33:06

回答

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

来到
+0

即使在编辑我的问题之前,您已经添加了正确的版本) – Feanor 2012-08-13 08:01:06

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 
3

从第一场比赛中的回路中按lenbreak排序。

-1

代码中的微小变化都会解决这个问题 -

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

    weeklytop 
+0

我认为支持downvote的评论会很好。 – theharshest 2012-08-13 07:48:47

+1

这不是我,但例如''每周/每天''永远不可能以这种方式找到。 – pepr 2012-08-13 08:44:10

0

为什么不使用像这样的urls_parts?

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

我用这个,这只是一个例子 – Feanor 2012-08-14 13:45:52