如何使用 Python 的 RE 模块从以下字符串中获取键值样式信息



>我们有这样的字符串:

2016-11-10 00:00:44,766 INFO [com.server.log.Log] - <Login Success. userInfo:  userID = 140803;appID = 3;channelID = 309;channelUserID = 76ab5a49ea40477f9623074d0d5e0227;userName = 1477806062675.ios.test;channelUserName = l379192229;createTime = 2016-10-30 13:41:02.0;loginTime = 1478707244762;userIP = 61.158.146.157;IMEI = FB7FE841-9E54-4421-86E0-1ED625068C57;newUser = false>

现在我想使用 python 的 re 模块从字符串中提取键值信息。

结果,它应该是一个字典:{'userID': 140803, 'channelid':309...}

你来了:

import re
string = """
2016-11-10 00:00:44,766 INFO [com.server.log.Log] - <Login Success. userInfo:  userID = 140803;appID = 3;channelID = 309;channelUserID = 76ab5a49ea40477f9623074d0d5e0227;userName = 1477806062675.ios.test;channelUserName = l379192229;createTime = 2016-10-30 13:41:02.0;loginTime = 1478707244762;userIP = 61.158.146.157;IMEI = FB7FE841-9E54-4421-86E0-1ED625068C57;newUser = false>
"""
rx = re.compile(r'(?P<key>w+)[ ]*=[ ]*(?P<value>[^;]+)')
result = dict()
for m in rx.finditer(string):
    result[m.group('key')] = m.group('value')
print(result)
# {'userName': '1477806062675.ios.test', 'channelUserName': 'l379192229', 'channelID': '309', 'userID': '140803', 'loginTime': '1478707244762', 'IMEI': 'FB7FE841-9E54-4421-86E0-1ED625068C57', 'appID': '3', 'userIP': '61.158.146.157', 'channelUserID': '76ab5a49ea40477f9623074d0d5e0227', 'newUser': 'false>n', 'createTime': '2016-10-30 13:41:02.0'}

ideone.com 上观看演示

你也可以这样做:

import re
a = """2016-11-10 00:00:44,766 INFO [com.server.log.Log] - <Login Success. userInfo:  userID = 140803;appID = 3;channelID = 309;channelUserID = 76ab5a49ea40477f9623074d0d5e0227;userName = 1477806062675.ios.test;channelUserName = l379192229;createTime = 2016-10-30 13:41:02.0;loginTime = 1478707244762;userIP = 61.158.146.157;IMEI = FB7FE841-9E54-4421-86E0-1ED625068C57;newUser = false>"""
a = [re.split('s*=s*',b) for b in re.findall(r'(?:userInfo:s*)(.*)', a)[0].split(';')]
d = dict(a)
d

输出:

{'IMEI': 'FB7FE841-9E54-4421-86E0-1ED625068C57',
 'appID': '3',
 'channelID': '309',
 'channelUserID': '76ab5a49ea40477f9623074d0d5e0227',
 'channelUserName': 'l379192229',
 'createTime': '2016-10-30 13:41:02.0',
 'loginTime': '1478707244762',
 'newUser': 'false>',
 'userID': '140803',
 'userIP': '61.158.146.157',
 'userName': '1477806062675.ios.test'}

步骤:

  1. 选择userInfo:后的所有内容
  2. ;分裂
  3. 在步骤 2 中循环浏览列表,并在 \s*=\s* 上拆分。
  4. 从步骤 3 中的列表列表创建字典

最新更新