2015-02-26 2 views
1

У меня есть строка, как это:regex, чтобы найти эти значения?

a = "switchport port-security mac-address 000a.1111.2222 vlan 43" 

Я хочу, чтобы приклеить макинтош и VLan номера в список как так:

["000a.1111.2222","43"] 

Я думал, что-то, как ниже будет делать это, любые идеи ?

import re 
a = "switchport port-security mac-address 000a.1111.2222 vlan 43" 
b = re.findall("([a-fA-F0-9]{4}[\.]){2}([a-fA-F0-9]{4})|(\d+)",a) 
print b 

ответ

1

Вот несколько иное решение с использованием split в случае, если вы не знаете наверняка, что вы можете получить элементы с индексом 3 и 5 split Ted строка (в данном случае, он захватывает split элементы только Тед после "mac-address" и "vlan", соответственно):

In [1]: a = "switchport port-security mac-address 000a.1111.2222 vlan 43" 

In [2]: splitted = a.split() 

In [3]: [x for i,x in enumerate(splitted) if i > 0 and splitted[i-1] in ["mac-address", "vlan"]] 
Out[3]: ['000a.1111.2222', '43'] 
+1

Мне это нравится Ответ, как я узнал от него больше всего, так что спасибо. – Paul

2

без регулярного выражения, просто используйте split.

a = "switchport port-security mac-address 000a.1111.2222 vlan 43" 

split_list = a.split() 
required_info = [split_list[3],split_list[5]] 
print required_info 
>> ["000a.1111.2222","43"] 
2

Вам просто нужно группирование:

>>> a = "switchport port-security mac-address 000a.1111.2222 vlan 43" 
>>> import re 
>>> re.findall(r'mac-address (.*).*vlan (.*)',a) 
[('000a.1111.2222 ', '43')] 
Смежные вопросы