【问题标题】:Python Regex can't find substring but it shouldPython Regex 找不到子字符串,但它应该
【发布时间】:2012-06-25 06:24:14
【问题描述】:

我正在尝试使用 BeautifulSoup 解析 html 以尝试提取网页标题。有时这不起作用,因为网站写得不好,例如 Bad End 标签。当这不起作用时,我会去手动正则表达式

我有文字

<html xmlns="http://www.w3.org/1999/xhtml"\n      xmlns:og="http://ogp.me/ns#"\n      xmlns:fb="https://www.facebook.com/2008/fbml">\n<head>\n    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>\n    <title>\n                    .@wolfblitzercnn prepping questions for the Cheney intvw. @CNNSitRoom today. 5p. \n            </title>\n    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />...

我正在尝试获取&lt;title&gt;&lt;/title&gt; 标签之间的值。它应该相当简单,但它不起作用。这是我的python代码。

result = re.search('\<title\>(.+?)\</title\>', html)
if result is not None:
    title = result.group(0)

无论出于何种原因,这都不适用于此文本。它返回 result.group() 作为 None 或者我得到一个 AttributeError。 AttributeError:“NoneType”对象没有属性“组”

我已将此文本 C&P'd 到在线 python 正则表达式开发人员中,并尝试了所有选项(re.match、re.findall、re.search)并且它们在那里工作,但无论出于何种原因在我的脚本中它都无法在这些标签之间找到任何东西。甚至尝试其他正则表达式,例如

<title>(.*?)</title>

【问题讨论】:

    标签: python regex


    【解决方案1】:

    如果你想在&lt;title&gt;&lt;\title&gt; 标签之间进行测试,你应该使用这个正则表达式:

    pattern = "<title>([^<]+)</title>"
    
    re.findall(pattern, html_string) 
    

    【讨论】:

    • 为什么是re.DOTALL 标志?你甚至不用.
    【解决方案2】:

    您应该使用dotall flag 使. 也匹配换行符。

    result = re.search('\<title\>(.+?)\</title\>', html, re.DOTALL)
    

    正如文档所说:

    ...没有这个标志,'.' 将匹配任何内容除了换行符

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 2017-09-18
      • 2021-05-06
      • 2018-12-04
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多