📅  最后修改于: 2023-12-03 14:50:46.081000             🧑  作者: Mango
给定一个字符串,试从字符串中提取出所有的IP地址,并输出至屏幕。例如:“192.168.1.1-255”
192.168.1.1-255
192.168.1.1
192.168.1.2
...
192.168.1.255
首先对输入的字符串进行解析,将其中的IP地址提取出来。IP地址由4个数字组成,以点号分隔。可以通过正则表达式来进行匹配。
对于地址段(如"1-10")的情况,可以将其转化为所有可能的地址和范围。例如:"1-10" 转化为 "1,2,3,4,5,6,7,8,9,10"。再将其插入到原地址中,组成完整的IP地址,进行校验。
最后,输出所有符合条件的IP地址或者提示没有符合条件的IP地址。
import re
def parse_ip_address(ip_str):
# 正则匹配IP地址
ip_list = re.findall(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b', ip_str)
address_list = []
for address_item in ip_list:
# 将IP地址分成4个数字
address_parts = address_item.split('.')
# 判断是否合法
if len(address_parts) != 4:
continue
valid_address_parts = []
invalid_part = False
for part in address_parts:
if '-' in part:
# 处理地址段
min_val, max_val = part.split('-')
try:
min_val = int(min_val)
max_val = int(max_val)
if min_val > max_val or min_val < 0 or max_val > 255:
invalid_part = True
break
for val in range(min_val, max_val+1):
valid_address_parts.append(str(val))
except ValueError:
invalid_part = True
break
else:
# 非地址段情况
try:
int_part = int(part)
if int_part < 0 or int_part > 255:
invalid_part = True
break
valid_address_parts.append(part)
except ValueError:
invalid_part = True
break
if invalid_part:
continue
# 组成完整的IP地址
address = '.'.join(valid_address_parts)
if address not in address_list:
address_list.append(address)
if not address_list:
print('没有符合条件的IP地址')
else:
for address_item in address_list:
print(address_item)
以上是一个Python的实现示例,包括了IP地址的解析和地址段的转化。您可以将其放在您的工程中使用,也可以根据您的需求进行修改和拓展。