我和这家伙有同样的问题:
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]使用这种代码,这是可能的吗?如果是,我必须改变什么才能去掉剩下的部分?
发布于 2019-03-22 18:09:29
你可以在这里使用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???***')通过这种方式,您可以访问所有键/值对,而不依赖于键的任何顺序或它们在文本中的实际存在。
发布于 2019-03-22 17:53:37
假设'Device:'始终存在,下面的Regular expression应该可以为您工作:
s = 'IP-Adress: 1.1.1.1 Device: Fritzbox Serialnumber: 123456789'
import re
re.search(r'Device:\s*(\w+)', s).group(1)
# 'Fritzbox'或者,如果你更喜欢字符串方法,你可以这样做:
s.split(':')[-2].strip().split()[0]
# 'Fritzbox'发布于 2019-03-22 18:00:50
假设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编辑
如果您有这些字符串的列表:
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])输出
['Fritzbox', 'Macin', 'IBM']https://stackoverflow.com/questions/55296942
复制相似问题