Python 如果URL具有特定关键字,则打印URL

Python 如果URL具有特定关键字,则打印URL,python,list,for-loop,Python,List,For Loop,我有一个从espn中提取URL的函数。URL看起来像这样 我已经创建了一个国家列表,如果url包含列表中的国家,我想打印一条消息,否则将传递到下一个url all_countries=['England','India','West Indies'] #one_day will have all the links for day in one_day: d=day.split('-') if d in all_countries: pr

我有一个从espn中提取URL的函数。URL看起来像这样

我已经创建了一个国家列表,如果url包含列表中的国家,我想打印一条消息,否则将传递到下一个url

all_countries=['England','India','West Indies']

#one_day will have all the links
for day in one_day:
        d=day.split('-')
        if d in all_countries:
            print(day)
        else:
            next
它不起作用。非常感谢您的帮助,因为
.split()
会返回一个列表。您必须迭代列表中的项目。本质上,你问计算机的是如果

["http://www.espncricinfo.com/series/13224/scorecard/426406/scotland", "vs", "england", "only", "odi", "england", "in", "scotland", "odi", "match", "2010"]
在一些列表中,如下所示(我假设):

我建议你使用一些打印语句。一个简单的
打印(d)
将显示这种行为。您必须迭代
d

for word in d:
    if word in all_countries:
        print(word)
        break # otherwise multiple words will trigger your logic multiple times

下面是一个简单的方法(假设
one_day
是一个URL列表,而
all_country
是一个国家名称列表):

#(URL和国家名称的一些示例值)
一天http://www.espncricinfo.com/...-vs-australia-only-odi-au...', 
'http://www.espncricinfo.com/...scotland-vs-england-only-...'] 
所有国家=[“印度”、“爱尔兰”、“澳大利亚”]
对于一天中的一天:
对于所有国家/地区的国家/地区:
如果country.lower()以天为单位:
打印(f'找到了{country}:`{day}`的匹配项)
#或只是:打印(天)
这是因为中的
检查子字符串,例如:

'Australia'.lower()在“…-与仅澳大利亚的odi au…”
##真的
这就是您在每天的条件
country.lower()内循环的每次迭代中检查的内容

p、 如果你担心类似于
'USA'
匹配包含
'-musac…'
或类似内容的url的情况,你也可以像在原始帖子中一样在
'-'
上拆分。要做到这一点,你可以这样说:

对于一天中的一天:
日分割=日分割('-'))
对于日分割中的元素:
如果[c.lower()中的元素表示所有国家/地区的c]:
打印(f'找到匹配项:{day}`)

或使用正则表达式更灵活;):

结果:

http://www.espncricinfo.com/series/13224/scorecard/426406/scotland-vs-england-only-odi-england-in-scotland-odi-match-2010
http://www.espncricinfo.com/series/13240/scorecard/426384/ireland-vs-australia-only-odi-australia-tour-of-england-and-ireland-2010
就你而言

all_countries=['England','India','West Indies']
    for day in one_day:
            d=day.split('-')
            if d in all_countries:
                print(day)
            else:
                next
您正在执行
d=day.split('-')
d也是一个列表,所以您需要迭代d,然后检查国家/地区的值 还有一点是,您所有的国家/地区都必须对国家/地区名称进行大写,所以在检查条件是否满足之前,您需要将其转换为小写

下面是可能有帮助的代码片段

all_countries=['England','India','West Indies']

for day in one_day:
    d=day.split('-')
    for val in d:
        if val.lower() in [x.lower() for x in all_countries ]:
            print(day)
        else:
            next

添加您的国家/地区列表删除
else:next
。恐怕
d
不是您所想的。看看这个。阅读一些调试代码的技巧。特别是,您应该添加
print(d)
以查看其值。您解析URL的逻辑需要更加复杂。首先,您可以忽略最后一个
/
之前的所有内容。其次,你只需要在字符串的其余部分找到国家名称。我不喜欢正则表达式。俗话说,“曾经有一个程序员有一个问题。他决定用正则表达式来解决它。现在他有两个问题。”XDI有三个问题,因为我是化学家。但是,当您想灵活地编写与某些内容匹配的代码时,Regex非常酷:)这似乎很有趣。你有任何我可以参考的链接来理解这个方法并了解它吗?我想如果我们指定
.split()
[”http://www.espncricinfo.com/series/13224/scorecard/426406/scotland“,“vs”,“england”,“only”,“odi”,“england”,“in”,“scotland”,“odi”,“match”,“2010”]
生成,第一个索引的最后一个单词在本例中被忽略,不幸的是,这是一个国家名称。如果我们可以使用正则表达式,并根据需要在split中指定分隔符,那就更好了。例如:
import re
d=re.split(“[^a-zA-Z]”,day)
@KiranMayeeMaddi-hmmm,是的,很好。虽然OP可以
.split(“/”
,如果他们真的想在开始时处理URL的部分!谢谢你指出这一点
all_countries=['England','India','West Indies']
    for day in one_day:
            d=day.split('-')
            if d in all_countries:
                print(day)
            else:
                next
all_countries=['England','India','West Indies']

for day in one_day:
    d=day.split('-')
    for val in d:
        if val.lower() in [x.lower() for x in all_countries ]:
            print(day)
        else:
            next