سؤال

أريد تعبيرا منتظما لاستخراج العنوان من صفحة HTML. حاليا لدي هذا:

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

هل هناك تعبير منتظم لاستخراج محتوياتu003Ctitle> لذلك ليس لدي لإزالة العلامات؟

هل كانت مفيدة؟

المحلول

يستخدم ( ) في regexp و group(1) في بيثون لاسترداد السلسلة الملتقطة (re.search سيعود None إذا لم تجد النتيجة، ف لا تستخدم group() مباشرة):

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

if title_search:
    title = title_search.group(1)

نصائح أخرى

حاول استخدام مجموعات التقاط:

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

لاحظ أن تبدأ Python 3.8, ، وإدخال تعبيرات التعيين (PEP 572) (:= المشغل)، من الممكن تحسين القليل حل Krzysztof Krasoń من خلال التقاط نتيجة التطابق مباشرة داخل حالة إذا كان متغير وإعادة استخدامه في جسم الحالة:

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

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

القطع المقدمة من التعليمات البرمجية لا تعامل مع Exceptionsهل لي أن أقترح

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

يرجع هذا سلسلة فارغة افتراضيا إذا لم يتم العثور على النمط، أو أول مباراة.

يحاول:

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

هل لي أن أنصحك بحساء جميل. الحساء هو ليب جيد جدا لتحليل كل مستند HTML الخاص بك.

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

أعتقد أن هذا يجب أن يكفي:

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

... على افتراض أن النص الخاص بك (HTML) في متغير يسمى "نص".

يفترض هذا أيضا أنه لا توجد علامات HTML الأخرى التي يمكن أن تكون مضمنة قانونا داخل علامة عنوان HTML وأي طريقة لتضمينها قانونيا لأي حرفا آخر داخل هذه الحاوية / الكتلة.

ومع ذلك ...

لا تستخدم التعبيرات العادية لتحليل HTML في Python. استخدام محلل HTML! (ما لم تكن ستتكتب محللا كاملا، فإنه سيكون من العمل الإضافي عندما تكون محلل HTML و SGML و XML بالفعل في المكتبات القياسية.

إذا كان مناولة "العالم الحقيقي" حساء العلامة HTML (والتي غالبا ما تكون غير مطابقة لأي Validator SGML / XML) ثم استخدم جميلة صفقة. إنه ليس في المكتبات القياسية (حتى الآن) ولكن موصى به لهذا الغرض.

خيار آخر هو: lxml ... ما هو مكتوب ل HTML منظم بشكل صحيح (معايير مطابقة) HTML. ولكن لديها خيار أن يسقط لاستخدام الجميلات الجميلة كمحلل: elementoup..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top