编程非常新,所以提前为我缺乏知识表示歉意。
在试图推断电话的目录号及其MAC地址的过程中,我在下面提供了一些示例数据,并将其放入LLDPLarge的变量中:
LLDPLarge = '''* Slot-1 Far-B65-2ND.1 # show lldp neighbours detailed | include (System Name: "regDN |: 08:00:0F)
Port ID : 08:00:0F:36:46:62
- System Name: "regDN 7335,MITEL 5340 IP"
Port ID : 08:00:0F:3E:56:1C
- System Name: "regDN 7383,MITEL 5340 IP"
Port ID : 08:00:0F:3C:12:B2
- System Name: "regDN 7270,MITEL 5340 IP"
Port ID : 08:00:0F:28:9C:22
- System Name: "regDN 7320,MITEL 5340 IP"'''我提出的代码如下:
vartest1 = "(?<=System Name: \"regDN )(.*)(?=,)"
vartest2 = "([0-9A-F]{2}[:-]){5}([0-9A-F]{2})"
vartest3 = vartest1 + "|" + vartest2
for match in re.finditer(vartest3, LLDPLarge):
sGroup = match.group()
print('{}'.format(sGroup))这是它创建的输出的一个示例,它非常接近于我想要的结果:
08:00:0F:36:46:62
7335
08:00:0F:3E:56:1C
7383
08:00:0F:3C:12:B2
7270
08:00:0F:28:9C:22
7320我想做的是将它输出到字典中,如下所示:
'08:00:0F:36:46:62' : '7335'
'08:00:0F:3E:56:1C' : '7383'
'08:00:0F:3C:12:B2' : '7270'
'08:00:0F:28:9C:22' : '7320'此时,我不知道该如何处理,或者我的代码是否是最优雅的?
任何帮助都是最值得感激的。
在此之前,非常感谢您。
发布于 2019-12-24 23:02:53
检查是否已填写group(1)或group(2)。如果group(1)有一个值,那么regexp匹配电话号码,否则它就匹配MAC地址。然后您可以使用它作为字典的键或值。
d = {}
for match in re.finditer(vartest3, LLDPLarge):
if match.group(2):
key = match.group()
else:
val = match.group()
d[key] = val
print(d)发布于 2019-12-24 23:12:47
from re import finditer
from itertools import islice
# LLDPLarge = ...
pattern_system = "(?<=System Name: \"regDN )(.*)(?=,)"
pattern_port = "([0-9A-F]{2}[:-]){5}([0-9A-F]{2})"
pattern = f"{pattern_system}|{pattern_port}"
d = {key.group(): value.group() for key, value in zip(*[finditer(pattern, LLDPLarge)] * 2)}发布于 2019-12-24 23:24:40
下面是一个简单的方法:
# Make a list with all the strings
everything = [match.group() for match in re.finditer(vartest3, LLDPLarge)]
# Pick every other one to get a list of just the MAC addresses
macs = everything[0::2]
# Same thing for the names
names = everything[1::2]
# Make a blank dictionary
dict = {}
# Fill the dictionary from our lists
for i in range(0, len(macs)):
dict[macs[i]] = names[i]
print(repr(dict))迭代工具解决方案比这更优雅,但这需要更少的python专业知识来理解。
https://stackoverflow.com/questions/59473957
复制相似问题