如何使用复杂的正则表达式使用re.match()和re.groupdict()获取字典?

时间:2014-09-23 11:09:21

标签: python regex

我希望从字符串中选择域名并将其放入字典中。所以我在这个字符串上使用re.match()re.groupdict()

Location: hk USER: Will Lee PASS: 1234 INFO: www.hotmail.com

代码是

re.match(r"(?P<Domain>\.([a-zA-Z0-9]+?)\.(?=com))",str).groupdict()

这应该是一个字典,其中键是“域”,值是“hotmail”,但它以某种方式返回:

AttributeError: 'NoneType' object has no attribute 'groupdict'

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用re.search代替re.match,因为匹配尝试从头开始查找文本。而且你需要在前瞻内部给出一个点,该点断言捕获一个或多个字母数字字符后跟字符串.com

>>> re.search(r'(?P<Domain>[a-zA-Z0-9]+)(?=\.com)', s).groupdict()
{'Domain': 'hotmail'}

答案 1 :(得分:0)

你应该使用re.match(?P&lt; .. dict key ...&gt;)和groupdict()。 代码:

import re
s="Location: hk USER: Will Lee PASS: 1234 INFO: www.hotmail.com"
yourDict = re.match(r"^Location: (?P<Location>\w+?) USER: (?P<User>.+?(?= PASS: .+? INFO: .+$)) PASS: (?P<Pass>.+?(?= INFO: .+$)) INFO: (?P<Doman>.+$)",s).groupdict()

=&GT; {'用户':'Will Lee','Doman':'www.hotmail.com','位置':'hk','通行证':'1234'}