2016-09-30 22 views
1

私はPython3.5で私の正規表現の仕事を作る際にスタックしています。 私は多くのURLを含むリストを持っています。 一部のURLは短いものもあれば、長いものもあります。正規表現で扱える文字の最大長はありますか?

ほとんどの場合、必要なURLを抜粋できますが、このURLだけを抜粋することはできません。ここで

http://www.forbes.com/sites/julianmitchell/2016/09/27/this-startup-uses-drones-to-map-and-manage-massive-construction-projects/#1ca4d634334e

コードです。

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 URLは「else:」節に入れる必要がありますので、cleanuplistに追加する必要があります。しかし、そうではありません。ここでも、このリストだけが新しいリストに追加されません。

私は、それから、このことにより、

forbes = re.compile(r"http://www.forbes.com/(?:.*)") 

を、具体的フォーブスサイトを選ぶのelif文の次追加しようとしました。

elif forbes.findall(urlList[i]): 
    cleanuplist.append(urlList[i]) 

しかし、フォーブスサイトも選択しません。

したがって、私は、正規表現を適用するための文字の最大限の境界があることを疑うことになります(findallはスキップされます)。 私は間違っている可能性があります。上記のforbes.comサイトをどのように抜粋できますか?

答えて

1

あなたの正規表現は、指定したURLと一致します。具体的には、URLの最後の部分にある#と一致します。それがスキップされた理由です。 「文字制限」はありません(Pythonのメモリが不足している場合を除く)。

正規表現では、より限定的にする必要があります。たとえば、あなたの正規表現のtwitter部分に一致するURLがhttp://www.forbes.com/sites/julianmitchell/2016/09/27/twitter-stock-downだったらどうなりますか?

さらに、re.findall()ではなくre.search()を使用します。

さらに、最後のelif句は、それが真実であろうとなかろうと同じことが起こるため、必要ないようです。

最後に、インデックスを使用する代わりに、反復する正しい方法はfor url in urlList:になります。これはPythonであり、Javaではありません。

+0

目の別のセットは私の多くを助けました...ありがとうございました! –

関連する問題