2014-11-24 23 views
1

例如,我有十幾個IPV6地址,其中8個部分由「:」分隔。 如果這些部分中的前幾個字符爲空,那麼我想用一個簡單的正則表達式去除它們。使IPV6地址更短的正則表達式

輸入:

1034:0123:0000:2100:3120:0000:0022:0001

輸出:

1034:123 :: 2100:3120: :22:1

這可能嗎?

+0

正則表達式本身不能縮短任何東西,正則表達式僅用於模式匹配。你使用什麼語言,所以我們知道什麼功能用於實際替換? – AndrewTet 2014-11-24 17:55:21

+6

IPv6地址無效;只有一組雙冒號可以存在。 – 2014-11-24 17:58:14

+0

謝謝,我只是認爲這將是最簡單的方法。 Bash,ShellScript。 – Vvarner 2014-11-24 17:58:33

回答

1

在評論中談到了它,但它現在有效,所以這裏是答案。

/(^|:)0{1,4}/g 

該正則表達式應該工作。

1

您可以使用Python的socket模塊獲得

>>> socket.getaddrinfo('1034:0123:0000:2100:3120:0000:0022:0001', 0, socket.AF_INET6) 
[(10, 1, 6, '', ('1034:123:0:2100:3120:0:22:1', 0, 0, 0)), (10, 2, 17, '', ('1034:123:0:2100:3120:0:22:1', 0, 0, 0)), (10, 3, 0, '', ('1034:123:0:2100:3120:0:22:1', 0, 0, 0))] 

>>> socket.getaddrinfo('1034:0123:0000:2100:3120:0000:0022:0001', 0, socket.AF_INET6)[0][4][0] 
'1034:123:0:2100:3120:0:22:1' 

正如你所看到的,所產生的IPv6地址擁有全部脫光出多餘的零。

+1

不包括一個。 – 2014-11-24 18:17:22

+0

這實際上是根據https://tools.ietf.org/html/rfc5952#section-4.2.2的正確表示法。單個':0:'不應壓縮爲'::' – 2014-11-24 21:15:27