从字符串获取特定信息

时间:2019-03-22 09:51:20

标签: python

我有和这个家伙一样的问题:

partition string in python and get value of last segment after colon

我的像是

IP-Adress: 1.1.1.1 Device: Fritzbox Serialnumber: 123456789

我只想获取设备,这样我的输出应类似于:“ Fritzbox”,我不需要其他任何东西。

result = mystring.rpartition(':')[2]

这种代码有可能吗? 如果是的话,我必须改变以切断其余部分吗?

4 个答案:

答案 0 :(得分:2)

您可以在此处使用re.split并使用结果创建字典-这样您就可以访问所需的任何键,例如:

import re

text = 'IP-Adress: 1.1.1.1 Device: Fritzbox Serialnumber: 123456789 Description: something or other here test: 5'
split = re.split(r'\s*(\S+):\s+', text)
data = dict(zip(split[1::2], split[2::2]))

这为您提供了data

{'IP-Adress': '1.1.1.1',
 'Device': 'Fritzbox',
 'Serialnumber': '123456789',
 'Description': 'something or other here',
 'test': '5'}

然后根据需要访问,例如:

device = data.get('Device', '***No Device Found???***')

通过这种方式,您可以在需要时访问所有键/值对,它不依赖于键的任何顺序或键在文本中的实际存在。

答案 1 :(得分:1)

假设std::vector<IResult*> results; results.push_back(new Result<int>("Test Int", 32)); results.push_back(new Result<double>("Test Double", 42.1)); 始终存在,那么以下Regular expression应该为您工作:

'Device:'

或者,如果您更喜欢字符串方法,则可以执行以下操作:

s = 'IP-Adress: 1.1.1.1 Device: Fritzbox Serialnumber: 123456789'

import re
re.search(r'Device:\s*(\w+)', s).group(1)
# 'Fritzbox'

答案 2 :(得分:0)

假设import os import datetime path = "/home/xxx/" current_time = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') command = "mkdir {0}".format(current_time) os.chdir(path) os.system(command) Device:始终存在:

Serialnumber

输出

s = 'IP-Adress: 1.1.1.1 Device: Fritzbox Serialnumber: 123456789'

def GetInBetween(s, st, ed):
  return (s.split(st))[1].split(ed)[0]

print(GetInBetween(s, 'Device:', 'Serialnumber').strip())

编辑

如果您有这些字符串的列表:

Fritzbox

OR

使用sList = ['IP-Adress: 1.2.2.2 Device: Fritzbox Serialnumber: 123456789', 'IP-Adress: 1.3.4.3 Device: Macin Serialnumber: 123456789', 'IP-Adress: 1.123.12.11 Device: IBM Serialnumber: 123456789', ] for elem in sList: print(GetInbetween(elem, 'Device:', 'Serialnumber').strip())

list comprehension

输出

print([GetInbetween(x, 'Device:', 'Serialnumber').strip() for x in sList])

答案 3 :(得分:0)

使用pygrok python包,我们可以以结构化格式从字符串中提取数据。

一个Python库,用于解析字符串并从结构化/非结构化数据中提取信息。

https://pypi.org/project/pygrok/

pip安装pygrok

SELECT * FROM user_fields WHERE (SELECT CITY FROM register_expert WHERE PERMISSION=1 AND ID=user_fields.ID_USER_FIELD)='$city_save'AND TITLE_USER_FIELD='$text_search_service';