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'
永远无法以这种方式找到。我使用这种方式,它只是一个示例