正则表达式不匹配组(Python)

时间:2015-09-01 14:34:13

标签: python regex list

在我的管理页面上,我有一个帐户列表,其中包含我想要捕获的各种值,例如ID,名称,类型等。在Regex101上,它使用" g"完全捕获所有值。和" s"修饰符活跃。 这就是我想要做的事情:

def extract_accounts(src):
        list_accounts = []
        try:
            pattern = re.compile(r'''id=(?P<id>.*?)&serverzone=.\">(?P<name>[a-zA-Z].*?)<\/a>.*?75px;\">(?P<level>.*?)<\/td>.*?75px;.*?75px;\">(?P<type>.*?)<\/td>.*?Open!''', re.X)
            print type(pattern)
            match = pattern.match(src)
            print match, "type=", type(match)
            name = match.group("name")
            print "name", name
            ids = match.group("id")
            level = match.group("level")
            type = match.group("type")
            #list_accounts.append(name, ids, level, type)
            #print ("id=", ids, ", name=",name," level=", level, " type=", type)
        except Exception as e:
            print (e)

但不知怎的,我明白了:

<type '_sre.SRE_Pattern'>
None type= <type 'NoneType'>
'NoneType' object has no attribute 'group'

我不知道自己做错了什么。 基本上我想要的是放入一个list = [(name1,id1,level1,type),(name2,id2,level1,type).....等等我从每一行中抓取的东西 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您应该按照组号捕获组。我完全改变了正则表达式,并按如下方式实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import re

def main():
    sample_data = '''
    <tr style="background-color: #343222;">
        <td style="width: 20px;"><img src="/images/Star.png" style="border: 0px;" /></td>
        <td><a target="_top" href="adminzone.php?id=2478&serverid=1">Mike</a></td>
        <td style="text-align: center;width: 75px;">74</td>
        <td>•Evolu†ion•</td>
        <td style="text-align: center;width: 100px;">1635</td>
        <td style="text-align: center;width: 75px;">40,826</td>
        <td style="text-align: center;width: 75px;">User</td>
        <td style="width: 100px;"><a target="_top" href="href="adminzone.php"><strong>Open!</strong></a></td>
    </tr>
    <tr style="background-color: #3423323;">
        <td style="width: 20px;"><img src="/images/Star.png" style="border: 0px;" /></td>
        <td><a target="_top" href="adminzone.php?suid=24800565&serverid=1">John</a></td>
        <td style="text-align: center;width: 75px;">70</td>
        <td>•Evolu†ion•</td>
        <td style="text-align: center;width: 100px;">9167</td>
        <td style="text-align: center;width: 75px;">36,223</td>
        <td style="text-align: center;width: 75px;">Admin</td>
        <td style="width: 100px;"><a style="color: #00DD19;" target="_top" href="adminzone.php?id=248005&serverid=1"><strong>Open!</strong></a></td>

'''

    matchObj = re.search('id=(.*)&serverid=.">(.*)<\\/a><\\/td>\\n.*?75px;\\">(.+)<\\/td>\\n.*\\n.*\\n.*75px;\\">(.+)<\\/td>\\n.*75px;\\">(.+)<\\/td>', sample_data, re.X)

    if matchObj:
        user_id = matchObj.group(1)
        name = matchObj.group(2)
        level = matchObj.group(3)
        user_type = matchObj.group(4)
        print user_id, name, level, user_type


if __name__ == '__main__':
    main()

输出: 2478 Mike 74 40,826

以上应该给你一个基本的想法。只是因为你可能想知道,group(0)是整个正则表达式。