在我的管理页面上,我有一个帐户列表,其中包含我想要捕获的各种值,例如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).....等等我从每一行中抓取的东西 提前感谢您的帮助。
答案 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)
是整个正则表达式。