web-dev-qa-db-ja.com

正規表現一致の一部を抽出する

HTMLページからタイトルを抽出する正規表現が必要です。現在、私はこれを持っています:

title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
    title = title.replace('<title>', '').replace('</title>', '') 

<title>のコンテンツのみを抽出する正規表現があるので、タグを削除する必要はありませんか?

94
hoju

正規表現で()およびpythonで group(1) を使用して、キャプチャした文字列を取得します( re.search は、見つからない場合はNoneを返します結果、group()を直接使用しないでください):

title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)

if title_search:
    title = title_search.group(1)
143

マークアップ言語の解析に正規表現を使用しないでください。lxmlまたはbeautifulsoupを使用してください。

37
iElectric

キャプチャグループを使用してみてください。

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
6
Aaron Maenpaa

re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)

3
Vinay Sajip

提供されているコードはExceptionsに対応していません

getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]

これは、パターンが見つからなかった場合、または最初に一致した場合、デフォルトで空の文字列を返します。

3
Steve K

Python 3.8の開始、および 割り当て式の導入(PEP 572):=演算子)に注意してください。ビット上の KrzysztofKrasońのソリューション if条件内で直接一致結果を変数としてキャプチャし、条件の本体で再利用します。

# pattern = '<title>(.*)</title>'
# text = '<title>hello</title>'
if match := re.search(pattern, text, re.IGNORECASE):
  title = match.group(1)
# hello
3
Xavier Guihot

試してください:

title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
2
Randy

ビューティフルスープをお勧めします。 Soupは、すべてのhtmlドキュメントを解析するための非常に優れたライブラリです。

soup = BeatifulSoup(html_doc)
titleName = soup.title.name
2
kharagpur

これで十分だと思います:

#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)

...テキスト(HTML)が「text」という名前の変数にあると仮定します。

また、これは、HTML TITLEタグ内に合法的に埋め込むことができる他のHTMLタグがなく、そのようなコンテナ/ブロック内に他の<文字を合法的に埋め込む方法がないことを前提としています。

ただし、...

PythonでのHTML解析に正規表現を使用しないでください。 HTMLパーサーを使用してください! (完全なパーサーを作成する場合を除き、さまざまなHTML、SGML、およびXMLパーサーが既に標準ライブラリにある場合は、追加の作業になります。

「現実世界」tag soupHTML(SGML/XMLバリデーターにしばしば適合しない)を処理する場合は、 BeautifulSoup パッケージ。 (まだ)標準ライブラリにはありませんが、この目的には広く推奨されています。

別のオプション: lxml ...これは、適切に構造化された(標準に準拠した)HTML用に記述されています。ただし、BeautifulSoupをパーサーとして使用する場合のフォールバックオプション ElementSoup があります。

1
Jim Dennis