2012-05-31 38 views
7

我想從不同長度的變量中提取最後兩個字段值。例如,考慮以下三個值:從分割中提取最後兩個字段

fe80::e590:1001:7d11:1c7e 

ff02::1:ff1f:fb6 

fe80::7cbe:e61:f5ab:e62 ff02::1:ff1f:fb6 

這三條線的長度是可變的。我想只提取最後兩個字段的值,如果我分割每行的分隔符:

也就是說,從三條線,我想:

7d11, 1c7e 

ff1f, fb6 

ff1f, fb6 

可以這樣使用split()做?我沒有得到任何想法。

回答

16

如果s是包含IPv6地址字符串,使用

s.split(":")[-2:] 

得到最後的兩個組件。 split()方法將返回所有組件的列表,並且[-2:]將切片該列表以僅返回最後兩個元素。

+0

我怎樣才能得到的價值分離:,這是第一行,我怎麼能得到的值像7d11:1c7e – learner

+0

似乎像一些分隔符是雙':'',這將是更好的將所有冒號替換爲空格並使用'split()' – xvatar

+2

@ user1411416您可以使用'':'。join()' – xvatar

15

您可以使用str.rsplit()從右側分裂:

>>> ipaddress = 'fe80::e590:1001:7d11:1c7e' 
>>> ipaddress.rsplit(':', 2) # splits at most 2 times from the right 
['fe80::e590:1001', '7d11', '1c7e'] 

這樣就避免了地址的第一部分的不必要的分裂。

+1

的確如此,但根據我的測試,它只有大約6%的速度。 –

+2

@JoelCornett我認爲無論多麼微小,它總是可以消除不必要的計算。 – Matt

相關問題