2012-01-30 20 views
10

私のスクレーパーの1つをPythonに移動する予定です。私はpreg_matchpreg_match_allをPHPで使用するのが快適です。私はpreg_matchに似たPythonで適切な関数を見つけることができません。誰も私の手伝いをしてくれませんか?例えばPythonでPHPのpreg_matchに相当する

私は<a class="title"</a>間でコンテンツを取得したい場合、私はPHPで次の関数を使用します。Pythonで、私は同様の機能を把握することはできませんよに対し

preg_match_all('/a class="title"(.*?)<\/a>/si',$input,$output); 

を。

+1

ここにpyt hon regex docs:http://docs.python.org/howto/regex.html –

+2

Pythonでは、HTMLの解析に正規表現を使用しません。[BeautifulSoup](http://www.crummy.com/software/BeautifulSoup /)。 http://stackoverflow.com/a/1732454/78845 – Johnsyweb

答えて

13

あなたはPythonのre moduleを探しています。

re.findallre.searchをご覧ください。

あなたが言いましたように、htmlの解析にはhtml parsersを使用しています。いくつかのオプションは、lxmlまたはBeautifulSoupのようなPythonで利用可能です。で

output = re.search('a class="title"(.*?)<\/a>', input, flags=re.IGNORECASE) 
    if output is not None: 
     output = output.group(0) 
     print(output) 

あなたが追加することができます(複数可?):

このWhy you should not parse html with regex

+0

あなたの返信に感謝の紳士を参照してください。私はBeatifulsoupを使い始めました。私はそれを使っていくつかの問題に直面しています。私はBeatifulsopuにhtmlデータを渡しましたが、私はこのエラーに直面しています。スープ= BeautifulSoup(データ)print soup.prettify()行52、 スープ= BeautifulSoup(データ) ファイル「/home/infoken-user/Desktop/lin/BeautifulSoup.py」1519行目、__init__ BeautifulStoneSoup .__ init __(self、* args、** kwargs) ファイル "/home/infoken-user/Desktop/lin/BeautifulSoup.py"、行1144、 .. '^ <\?。* encoding = [\' "](。*?)[\ '"]。* \?>')。match(xml_data) TypeError:予期される文字列またはバッファ – funnyguy

1

を読んで興味があるかもしれませんマルチラインモードを有効にするための正規表現の開始:

output = re.search('(?s)a class="title"(.*?)<\/a>', input, flags=re.IGNORECASE) 
    if output is not None: 
     output = output.group(0) 
     print(output)