【问题标题】:Why is the regular expression returning an error in python?为什么正则表达式在python中返回错误?
【发布时间】:2009-03-05 10:13:47
【问题描述】:

我在 python 中尝试以下正则表达式,但它返回错误

import re
...

#read a line from a file to variable line
# loking for the pattern 'WORD' in the line ...

m=re.search('(?<=[WORD])\w+',str(line))
m.group(0)

我收到以下错误:

AttributeError: 'NoneType' 对象没有属性 'group'

【问题讨论】:

    标签: python regex


    【解决方案1】:

    发生这种情况是因为正则表达式不匹配。因此 m 是 None 并且你当然不能访问 group[0]。在尝试访问组成员之前,您需要先测试搜索是否成功。

    【讨论】:

    • 实际上是m,即None。 (次要)
    【解决方案2】:

    两个问题:

    1. 您的模式不匹配,因此m 设置为None,而None 没有group 属性。

    2. 我相信你的意思是:

      m= re.search(r"(?<=WORD)\w+", str(line))
      

      输入,或

      m= re.search(r"(?P<WORD>\w+)", str(line))
      

      前者匹配“WORDabc def”中的“abc”;后者匹配“abc def”中的“abc”,匹配对象将有一个包含“abc”的.group("WORD")。 (在指定正则表达式时,使用 r"" 字符串通常是一个好主意。)

    【讨论】:

      【解决方案3】:

      re.search documentation says:

      如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点找到零长度匹配不同。

      【讨论】:

        【解决方案4】:
        >>> help(re.search)
        Help on function search in module re:
        
        search(pattern, string, flags=0)
            Scan through string looking for a match to the pattern, returning
            a match object, or None if no match was found.
        

        查看最后一行:如果没有找到匹配项,则返回 None

        【讨论】:

          【解决方案5】:

          顺便说一句,您的正则表达式不正确。 如果您查找“WORD”,它应该只是“WORD”。 str 也是无关的。您的代码应如下所示:

          m = re.search('WORD', line)
          if m:
              print m.group[0]
          

          您的原始正则表达式可能会返回意外和不希望的结果:

          >>> m = re.search('(?<=[WORD])\w+', 'WORDnet')
          >>> m.group(0)
          'ORDnet'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-11-19
            • 1970-01-01
            • 2019-04-20
            • 1970-01-01
            相关资源
            最近更新 更多