27
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi muốn trích xuất một địa chỉ IP từ một chuỗi [thực ra là HTML một dòng] bằng Python.
>>> s = "Current IP CheckCurrent IP Address: 165.91.15.131"
- '165.91.15.131' là những gì tôi muốn!
Tôi đã thử sử dụng các biểu thức thông thường, nhưng cho đến nay tôi chỉ có thể đến số đầu tiên.
>>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
Nhưng tôi không nắm bắt được biểu hiện reg; Mã trên đã được tìm thấy và sửa đổi từ nơi khác trên web.
Tylerh
21.2K59 Huy hiệu vàng74 Huy hiệu bạc93 Huy hiệu đồng59 gold badges74 silver badges93 bronze badges
Khi được hỏi ngày 23 tháng 5 năm 2010 lúc 6:57May 23, 2010 at 6:57
1
Xóa nhóm bắt giữ của bạn:
ip = re.findall[ r'[0-9]+[?:\.[0-9]+]{3}', s ]
Result:
['165.91.15.131']
Notes:
- Nếu bạn đang phân tích cú pháp HTML, đó có thể là một ý tưởng tốt để xem đẹp.
- Biểu thức thông thường của bạn phù hợp với một số địa chỉ IP không hợp lệ như
0. Đây không nhất thiết là một vấn đề, nhưng bạn nên biết về nó và có thể xử lý tình huống này. Bạn có thể thay đổi>>> import re >>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ] >>> ip ['165']
1 thành>>> import re >>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ] >>> ip ['165']
2 để sửa một phần mà không làm cho biểu thức thông thường quá phức tạp.>>> import re >>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ] >>> ip ['165']
Đã trả lời ngày 23 tháng 5 năm 2010 lúc 7:02May 23, 2010 at 7:02
Mark Byersmark ByersMark Byers
784K187 Huy hiệu vàng1552 Huy hiệu bạc1440 Huy hiệu đồng187 gold badges1552 silver badges1440 bronze badges
3
Bạn có thể sử dụng Regex sau để chỉ chụp địa chỉ IP hợp lệ
re.findall[r'\b25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\b',s]
trả lại
['165', '91', '15', '131']
Đã trả lời ngày 23 tháng 5 năm 2010 lúc 7:11May 23, 2010 at 7:11
SnehalsnehalSnehal
6,9262 Huy hiệu vàng31 Huy hiệu bạc40 Huy hiệu đồng2 gold badges31 silver badges40 bronze badges
1
import re
ipPattern = re.compile['\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}']
findIP = re.findall[ipPattern,s]
findIP contains ['165.91.15.131']
JDOTJDOT
15.5K12 Huy hiệu vàng63 Huy hiệu bạc116 Huy hiệu đồng12 gold badges63 silver badges116 bronze badges
Đã trả lời ngày 7 tháng 1 năm 2013 lúc 5:24Jan 7, 2013 at 5:24
Rambo7Rambo7Rambo7
1.13510 Huy hiệu bạc17 Huy hiệu đồng10 silver badges17 bronze badges
Bạn có thể sử dụng Regex sau để trích xuất IP hợp lệ mà không có lỗi sau 1. Một số đã phát hiện
>>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
3 vì IP hợp lệ 2. Một số không phát hiện >>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
4 vì IP hợp lệ 3. Một số không phát hiện IP bắt đầu bằng 0 như >>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
51.Some detected
>>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
3 as valid IP2.Some don't detect
>>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
4 as valid IP3.Some don't detect IP that start with zero like
>>> import re
>>> ip = re.findall[ r'[[0-9]+][?:\.[0-9]+]{3}', s ]
>>> ip
['165']
5Vì vậy, ở đây tôi đăng một regex hoạt động trên tất cả các điều kiện trên.
Lưu ý: Tôi đã trích xuất hơn 2 triệu IP mà không gặp vấn đề gì với Regex sau.
[?:[?:1\d\d|2[0-5][0-5]|2[0-4]\d|0?[1-9]\d|0?0?\d]\.]{3}[?:1\d\d|2[0-5][0-5]|2[0-4]\d|0?[1-9]\d|0?0?\d]
Đã trả lời ngày 13 tháng 3 năm 2018 lúc 8:11Mar 13, 2018 at 8:11
Mohsen Sarkarmohsen SarkarMohsen Sarkar
5.7907 Huy hiệu vàng44 Huy hiệu bạc85 Huy hiệu Đồng7 gold badges44 silver badges85 bronze badges
2
Cách dễ nhất để tìm địa chỉ IP từ nhật ký ..
s = "Current IP CheckCurrent IP Address: 165.91.15.131"
info = re.findall[r'[\d.-]+', s]
Trong [42]: thông tin
Ra [42]: ['165.91.15.131']
Đã trả lời ngày 17 tháng 8 năm 2015 lúc 3:54Aug 17, 2015 at 3:54
2
Đây là cách tôi đã làm nó. Tôi nghĩ nó rất sạch sẽ
import re
import urllib2
def getIP[]:
ip_checker_url = "//checkip.dyndns.org/"
address_regexp = re.compile ['\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}']
response = urllib2.urlopen[ip_checker_url].read[]
result = address_regexp.search[response]
if result:
return result.group[]
else:
return None
get_ip [] trả về IP thành một chuỗi hoặc không có
Bạn có thể thay thế Địa chỉ_REGEXP cho các biểu thức thông thường khác nếu bạn thích phân tích cú pháp chính xác hơn hoặc có thể thay đổi nhà cung cấp dịch vụ web.
Đã trả lời ngày 21 tháng 1 năm 2013 lúc 19:23Jan 21, 2013 at 19:23
Gonzalo Caogonzalo CaoGonzalo Cao
2.1661 Huy hiệu vàng21 Huy hiệu bạc17 Huy hiệu đồng1 gold badge21 silver badges17 bronze badges