2012-05-31 36 views
7

Tôi muốn trích xuất hai giá trị trường cuối cùng từ một biến có độ dài khác nhau. Ví dụ: hãy xem xét ba giá trị bên dưới:trích xuất hai trường cuối cùng từ tách

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

ff02::1:ff1f:fb6 

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

Ba dòng này có độ dài thay đổi. Tôi muốn trích xuất chỉ có hai giá trị trường cuối cùng nếu tôi chia mỗi dòng bằng delimiter:

Đó là, từ ba dòng, tôi muốn:

7d11, 1c7e 

ff1f, fb6 

ff1f, fb6 

này có thể được thực hiện bằng split()? Tôi không nhận được bất kỳ ý tưởng nào.

Trả lời

16

Nếu s là chuỗi chứa địa chỉ IPv6, sử dụng

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

để có được hai thành phần cuối cùng. Phương thức split() sẽ trả về danh sách tất cả các thành phần và [-2:] sẽ chia danh sách này để chỉ trả lại hai phần tử cuối cùng.

+0

làm thế nào tôi có thể nhận được các giá trị được phân tách bởi:, đó là cho dòng đầu tiên, làm cách nào tôi có thể nhận được các giá trị như 7d11: 1c7e – learner

+0

có vẻ như một số dấu phân tách đôi '': '', sẽ tốt hơn thay thế tất cả các dấu hai chấm thành không gian và sử dụng 'split()' – xvatar

+2

@ user1411416 bạn có thể sử dụng '':'. join()' – xvatar

15

Bạn có thể sử dụng str.rsplit() chia từ quyền:

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

Điều này tránh sự tách không cần thiết của phần đầu tiên của địa chỉ.

+1

Đúng, nhưng theo thử nghiệm của tôi, nó chỉ nhanh hơn khoảng 6%. –

+2

@JoelCornett Tôi nghĩ rằng thực hành luôn luôn tốt để loại bỏ các tính toán không cần thiết bất kể nhỏ như thế nào. – Matt

Các vấn đề liên quan