我正在堆叠使我的正则表达式在Python3.5中工作。 我有一个包含大量网址的列表。 有些网址很短,有些网址很长。
我可以摘录我想要的网址...但大多只是这个网址不能摘录。
这是代码。
urlList=[] # Assume there are many URLs in this list.
interdrone = re.compile(r"http://www.interdrone.com/news/(?:.*)")
hp = re.compile(r"http://www.interdrone.com/$")
restOfThem=re.compile(r'\#|youtube|bzmedia|facebook|twitter|mailto|geoconnexion.com|linkedin|gplus|resources\.sdtimes\.com|precisionagvision')
cleanuplist =[] # Adding URLs I need to this new list.
for i in range(0,len(urlList)):
if restOfThem.findall(ursList[i]):
continue
elif hp.findall(urlList[i]):
continue
elif interdrone.findall(urlList[i]):
cleanuplist.append(urlList[i])
else:
cleanuplist.append(urlList[i])
logmsg("Generated Interdrone clean URL list")
return (cleanuplist)
forbes.com网址应该落入"否则:"子句,所以应该添加到cleanuplist中。但事实并非如此。同样,只有这一个没有添加到新列表中。
我试图通过这个特别挑选福布斯网站,
forbes = re.compile(r"http://www.forbes.com/(?:.*)")
然后,添加以下elif语句。
elif forbes.findall(urlList[i]):
cleanuplist.append(urlList[i])
然而,它也没有拿起福布斯网站。
因此,我怀疑应用正则表达式是否存在某种最大字符边界(以便跳过findall?)。 我错了。我怎样才能摘录上面的forbes.com网站?
答案 0 :(得分:1)
您的正则表达式与您提供的网址相匹配,尤其是网址最后一部分中显示的#
。这就是它被跳过的原因。没有“字符限制”(除非Python内存不足)。
你需要对正则表达式进行更严格的限制。例如,如果您的网址为http://www.forbes.com/sites/julianmitchell/2016/09/27/twitter-stock-down
,该网址与您的正则表达式的twitter
部分是否匹配会怎样?
此外,您可能希望使用re.search()
,而不是re.findall()
。
此外,您似乎不需要最后一个elif
子句,因为无论它是否真实都会发生同样的事情。
最后,迭代的正确方法是for url in urlList:
而不是使用索引。这是Python,而不是Java。