2016-07-08 2 views
1

Я пытаюсь извлечь адрес IPV6 из строки ниже. Я получаю ниже выходные .. Я просто хочу, пока адрес IPV6, а не за that.That это я не хочу видеть Scope: LinkРегулярное выражение для извлечения адреса IPV6

Код:

out ='ifconfig eth6.36\r\neth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ed/64 Scope:Link\r\n   inet6 addr: 2030:30:30:30::10/64 Scope:Link\r\n UP BROADCAST MULTICAST MTU:9000 Metric:1\r\n   RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n   TX packets:62 errors:0 dropped:0 overruns:0 carrier:0\r\n   collisions:0 txqueuelen:0 \r\n   RX bytes:0 (0.0 b) TX bytes:7004 (6.8 KiB)\r\n\r\n' 
pattern = '(eth6\.36\s+Link encap:Ethernet\s*HWaddr\s*\w\w:\w\w:.+\s*inet addr:36.36.36.10\s*Bcast:36.36.36.255\s*Mask:255.255.255.0\s*\inet6 addr:\s*\w\w\w\w:.+)' 

match = re.search(pattern, out) 
print match.groups() 

Выход:

('eth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ed/64 Scope:Link\r',) 
+1

вы захватывая всю линию в основном. вы должны захватить только часть ipv6. –

+0

Группа захвата - это то, что заключено в круглые скобки. Переместите скобки так, чтобы они включали только то, что вы хотите захватить. –

+0

Вы имеете в виду, что шаблон должен быть pattern = '(eth6 \ .36 \ s + Link encap: Ethernet \ s * HWaddr \ s * \ w \ w: \ w \ w:. + \ s * inet addr: 36.36.36.10 \ s * Bcast: 36.36.36.255 \ s * Маска: 255.255.255.0 \ s * \ inet6 addr: \ s * \ w \ w \ w \ w :) ' –

ответ

1

Вы можете скопировать круглые скобки в соответствии с вашими потребностями. Как

pattern = '(eth6\.36\s+Link encap:Ethernet\s*HWaddr\s*\w\w:\w\w:.+\s*inet addr:36.36.36.10\s*Bcast:36.36.36.255\s*Mask:255.255.255.0\s*\inet6 addr:\s*\w\w\w\w:.+) Scope:Link' 

получит

In [9]: match.groups()[0] 
Out[9]: 'eth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ed/64' 

и

pattern = 'eth6\.36\s+Link encap:Ethernet\s*HWaddr\s*\w\w:\w\w:.+\s*inet addr:36.36.36.10\s*Bcast:36.36.36.255\s*Mask:255.255.255.0\s*\inet6 addr:\s*(\w\w\w\w:.+) Scope:Link' 

получат

In [16]: match.groups()[0] 
Out[16]: 'fe80::a236:9fff:fe5f:24ed/64' 
0

Так как вы имеете дело с (стандартизированным) выходом ifconfig, почему бы не разобраться с regex s целиком и просто управлять строкой?

$ cat /tmp/tmp.py 
#!/usr/bin/env python3 

out ='ifconfig eth6.36\r\neth6.36 Link encap:Ethernet HWaddr A0:36:9F:5F:24:EE \r\n   inet addr:36.36.36.10 Bcast:36.36.36.255 Mask:255.255.255.0\r\n   inet6 addr: fe80::a236:9fff:fe5f:24ed/64 Scope:Link\r\n   inet6 addr: 2030:30:30:30::10/64 Scope:Link\r\n UP BROADCAST MULTICAST MTU:9000 Metric:1\r\n   RX packets:0 errors:0 dropped:0 overruns:0 frame:0\r\n   TX packets:62 errors:0 dropped:0 overruns:0 carrier:0\r\n   collisions:0 txqueuelen:0 \r\n   RX bytes:0 (0.0 b) TX bytes:7004 (6.8 KiB)\r\n\r\n' 

ip6 = out.split()[6] 
print(ip6) 

, который дает вам:

$ python /tmp/tmp.py 
A0:36:9F:5F:24:EE 
Смежные вопросы