【问题标题】:Python Regex "object has no attribute"Python 正则表达式“对象没有属性”
【发布时间】:2010-12-02 06:05:21
【问题描述】:

我一直在整理一份我们需要用新内容更新的页面列表(我们正在切换媒体格式)。在此过程中,我正在对正确包含新内容的页面进行编目。

这是我正在做的事情的总体思路:

  1. 遍历文件结构并获取文件列表
  2. 对于读取到缓冲区的每个文件,并使用正则表达式搜索匹配特定标签
  3. 如果匹配,再测试 2 个正则表达式匹配
  4. 将结果匹配(一个或另一个)写入数据库

在第 3 次正则表达式模式匹配之前一切正常,我得到以下信息:

'NoneType' object has no attribute 'group'

# only interested in embeded content
pattern = "(<embed .*?</embed>)"

# matches content pointing to our old root
pattern2 = 'data="(http://.*?/media/.*?")'

# matches content pointing to our new root
pattern3 = 'data="(http://.*?/content/.*?")'

matches = re.findall(pattern, filebuffer)
for match in matches:
    if len(match) > 0:

    urla = re.search(pattern2, match)
    if urla.group(1) is not None:
        print filename, urla.group(1)

    urlb = re.search(pattern3, match)
    if urlb.group(1) is not None:
        print filename, urlb.group(1)

谢谢。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您的异常意味着 urla 的值为 None。由于 urla 的值由 re.search 调用确定,因此 re.search 返回 None。当字符串与模式不匹配时会发生这种情况。

    所以基本上你应该使用:

    urla = re.search(pattern2, match)
    if urla is not None:
        print filename, urla.group(1)
    

    而不是你现在拥有的。

    【讨论】:

      【解决方案2】:

      TypeError 的原因是searchmatch 通常返回MatchObjectNone。其中只有一个具有group 方法。而且它不是None。所以你需要这样做:

      url = re.search(pattern2, match)
      if url is not None:
          print(filename, url.group(0))
      

      P.S. PEP-8 建议使用 4 个空格进行缩进。这不仅仅是一种意见,更是一种好的做法。您的代码很难阅读。

      【讨论】:

      • 啊。谢谢。我在代码中使用了标签,这些标签被本网站的格式化引擎重新格式化/重新解释。 “url 不是 None 修复的”
      【解决方案3】:

      我遇到了同样的问题。

      使用python2.6,可以这样解决:

      匹配匹配: 如果长度(匹配)> 0: urla = re.search(pattern2, 匹配) 尝试: urla.group(1): 打印文件名,urla.group(1) 除外: 打印“问题”,pattern2 urlb = re.search(pattern3, 匹配) 尝试: urlb.group(1) 打印文件名,urlb.group(1) 除了: 打印“问题”,pattern3

      【讨论】:

      • 小错字:除了:而不是“excpet:”用于url块。
      【解决方案4】:

      还请注意您错误地假设错误出现在 第三次 匹配中,而实际上它出现在第二次匹配中。这似乎导致了一个错误的假设,即第二场比赛正在做某事使第三场比赛无效,从而使您偏离轨道。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 2021-11-23
        相关资源
        最近更新 更多