2017-07-04 16 views
-1

誰でも入力文字列から部分文字列を抽出する方法を教えてください。文字列からHTMLタグを抽出する

入力:

'<h3>freedom machines.</h3><p>dom.</p><br/><p>The robust display.</p>' 

出力:

'<h3>freedom machines.</h3>' 

私は正規表現でそれを行うにしようとしていますが、運。 ご意見はありますか?

は、私は私の文字列が任意のヘッダータグ<h1><h2>または<h3>)から開始するかどうかをチェックする必要があり、それがなければ、私はそのヘッダータグを抽出します。

私はstartswithと試みたが、成功しません:

if input.startswith("<h"): 
    ** Code to extract that h tag. 
+3

あなたのパターンを抽出しようとしていますか?もっと具体的にしてください – sharath

+1

[美しいスープ](https://www.crummy.com/software/BeautifulSoup/)または[elementtree](https://docs.python.org/3/library/xml.etree.elementtree)を使用してください。 .html)を解析(x)します。 [決してregex](https://stackoverflow.com/a/1732454/4954037)。 –

+0

私は既にBeautifulSoupを使用していますが、私の要件は少し異なります。だから私はスープの出力をstr型に変換しなければならなかったのです。 – user3476378

答えて

2

あなたは<h3>タグの間のテキストを抽出するためにre.searchを使用することができます。

<h3>.*?</h3>パターンは、<h3>タグの間のものと一致します。 BeautifulSoupで

>>> import re 
>>> text = '<h3>freedom machines.</h3><p>dom.</p><br/><p>The robust display.</p>' 
>>> match = re.search("<h3>.*?</h3>", text, re.IGNORECASE | re.MULTILINE) 
>>> print(match.group()) 

'<h3>freedom machines.</h3>' 
+0

OPは彼の文字列が* any * headerタグから始まるかどうかをチェックする必要があります –

+0

Hey Thanks @Aaron。どのタイプのヘッダータグが使用されているのかわからないとします。 h1、h2、またはh3にすることができます。だから、その場合何ができるだろうか? – user3476378

+0

@ user3476378次に、 '。*? '、' \ d 'は数字を意味します。 @Aaron。 – Aaron

1

html = '<h3>freedom machines.</h3><p>dom.</p><br/><p>The robust display.</p>' 
soup = BeautifulSoup(html) 
text = soup.find("h3").string 

これはBeautifulSoupの基本的な使用です。 文字列をパラメータとしてBeautifulSoupオブジェクトを作成します。 次に、そのfindメソッドを使用して、探している名前のタグを探します。 最後に、タグ囲みのテキストをstring属性で取得します。

あなたのテキストが<h1>,<h2>または<h3>であることがわかっていますが、どちらが良いか分からない場合は、すべて試してみてください。 あなたも一度に3を確認することができます。

tag = soup.find("h1") or soup.find("h2") or soup.find("h3") 
text = tag.string 

orオペレータはTrueブール単位として評価された最初のメンバーを返します。 この場合、最初のsoup.findの結果はNoneではないことを意味します。 findメソッドはイテレータも受け入れますので、静的タプルに渡すことができます。 結果は、要求されたタイプに一致するタグオブジェクト(存在する場合)です。もちろん

tag = soup.find(("h1", "h2", "h3")) 

、あなたが望むものを含んでいますどのようなタグ、事前に正確に知ることは良いです... ページの両方<h1><h2>タグがある場合、あなたは何をすべきかを知ることができません。 ..

+0

すでにこれを行いました。しかし、私はヘッダータグだけを抽出する必要があります。私はどのタグがそこにあるのか分からないかもしれません。 h3、h2またはh1にすることができます。 – user3476378

+2

@ user3476378あなたの質問にその詳細が必要です。とにかく、私の答えを編集する。 –

+0

それをしました。知らせてくれてありがとうございます。! – user3476378

関連する問題