2009-09-04 18 views
17

私は文字列のようにstr1 = "IWantToMasterPython"Pythonで他の2つの文字列の間の文字列を抽出する方法は?

上記の文字列から"Py"を抽出したい場合は、私は次のように書いています:

extractedString = foo("Master","thon") 

私はHTMLページから歌詞を抽出しようとしています。歌詞は<div class = "lyricbox"> ....lyrics goes here....</div>のように書かれています。

私はどのように実装することができますか?

答えて

30

ソリューションは、正規表現を使用することです:

import re 
r = re.compile('Master(.*?)thon') 
m = r.search(str1) 
if m: 
    lyrics = m.group(1) 
+1

は素敵な答え。まさに私が知りたかったもの。 Thanx –

8
def foo(s, leader, trailer): 
    end_of_leader = s.index(leader) + len(leader) 
    start_of_trailer = s.index(trailer, end_of_leader) 
    return s[end_of_leader:start_of_trailer] 

(あなたは何の行動を指定していないリーダーは、文字列sに存在しない、またはトレーラーがそれ以降存在しない場合、これはとValueErrorを発生させます例外を発生させることは非常に自然でPython的なことです。呼び出し側がそのような場合に何をすべきかを知っているならtry/exceptを使って処理します)。

REベースのアプローチも可能ですが、この純粋な文字列アプローチは簡単だと思います。

2

htmlページからデータを抽出する場合は、BeautifulSoupライブラリを使用することを強くおすすめします。私はhtmlからデータを抽出するためにもそれを使用し、それは素晴らしい作品です。

11

BeautifulSoupは、あなたがしたいことを行う最も簡単な方法です。

sudo easy_install beautifulsoup 

あなたが欲しいものを行うためのサンプル・コードは次のとおりです:あなたが直接URLからコンテンツをつかむために、Pythonのurllibを使用することができます

from BeautifulSoup import BeautifulSoup 

doc = ['<div class="lyricbox">Hey You</div>'] 
soup = BeautifulSoup(''.join(doc)) 
print soup.find('div', {'class': 'lyricbox'}).string 

それは次のようにインストールすることができます。は、さらに解析する必要がある場合にも役立ちます。

+1

これは、彼がそれを使用していると言っていることについて、これは間違いなく正しい方法です。 – wxs

+0

+1、それは大いに役立ちます...ありがとう – mshsayem

+1

素敵に置く。私の目的は何だったのですか。 本当に役に立ちます。 –

2

あなたは、リスト内のすべてのオカレンスの出力をご希望の場合にも、これを試すことができます。

import re 
str1 = "IWantToMasterPython" 

out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1) 
if out : 
    print out 
関連する問題