2012-08-13 85 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