Saya ingin ekspresi reguler mengekstrak judul dari halaman HTML. Saat ini saya memiliki ini:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Apakah ada ekspresi reguler untuk mengekstrak hanya konten <title> jadi saya tidak perlu menghapus tag?
Jawaban:
Gunakan
(
)
di regexp dangroup(1)
di python untuk mengambil string yang ditangkap (re.search
akan dikembalikanNone
jika tidak menemukan hasilnya, jadi jangan gunakangroup()
secara langsung ):sumber
import re
atau Anda akan mendapatkanNameError: name 're' is not defined
Perhatikan bahwa memulai
Python 3.8
, dan pengenalan ekspresi tugas (PEP 572) (:=
operator), dimungkinkan untuk sedikit meningkatkan solusi Krzysztof Krasoń dengan menangkap hasil pertandingan langsung dalam kondisi if sebagai variabel dan menggunakannya kembali dalam tubuh kondisi :sumber
Coba gunakan grup penangkapan:
sumber
sumber
Izinkan saya merekomendasikan Anda untuk Beautiful Soup. Soup adalah lib yang sangat bagus untuk mengurai semua dokumen html Anda.
sumber
Mencoba:
sumber
.*?
jika ada beberapa</title>
dalam dokumen (tidak mungkin tetapi Anda tidak pernah tahu).Potongan kode yang disediakan tidak sesuai dengan
Exceptions
Boleh saya sarankanIni mengembalikan string kosong secara default jika pola belum ditemukan, atau kecocokan pertama.
sumber
Saya pikir ini sudah cukup:
... dengan asumsi bahwa teks Anda (HTML) ada dalam variabel bernama "teks".
Ini juga mengasumsikan bahwa tidak ada tag HTML lain yang dapat disematkan secara legal di dalam tag HTML TITLE dan tidak ada cara untuk menyematkan karakter <lainnya secara legal di dalam penampung / blok tersebut.
Namun ...
Jangan gunakan ekspresi reguler untuk penguraian HTML dengan Python. Gunakan pengurai HTML! (Kecuali jika Anda akan menulis parser lengkap, yang akan menjadi pekerjaan ekstra ketika berbagai parser HTML, SGML dan XML sudah ada di pustaka standar.
Jika Anda menangani HTML sup tag "dunia nyata" (yang sering kali tidak sesuai dengan validator SGML / XML apa pun), gunakan paket BeautifulSoup . Ini tidak ada di pustaka standar (belum) tetapi sangat direkomendasikan untuk tujuan ini.
Pilihan lainnya adalah: lxml ... yang ditulis untuk HTML yang terstruktur dengan benar (sesuai standar). Tetapi ia memiliki opsi untuk kembali menggunakan BeautifulSoup sebagai parser: ElementSoup .
sumber