我需要取反部分IP地址,仅获取最后两个八位字节 例如:
IP_Add1 192.168.10.1 LAN 10
我只想要IP Add(10.1)的最后两个八位位组,所以我需要输出如下:
IP_Add1 10.1 LAN 10
我已经尝试使用以下代码,但结果得到一个空列表[]。有帮助吗?
str_2 = '''IP_Add1 192.168.10.1 LAN 10
IP_Add1 192.168.10.1 LAN 20
IP_Add1 192.168.20.1 LAN 30
IP_Add1 192.168.30.1 LAN 40
'''
print(re.findall(r"\w+ [\d]{3}.[\d]{3}.[\d]{2}.[\d]{1}", str_2))
答案 0 :(得分:0)
我已经尝试使用以下代码,但是我得到一个空列表[]
相反,当我运行代码时,我得到以下信息:
import re
str_2 = '''IP_Add1 192.168.10.1 LAN 10
IP_Add1 192.168.10.1 LAN 20
IP_Add1 192.168.20.1 LAN 30
IP_Add1 192.168.30.1 LAN 40
'''
print(re.findall(r"\w+ [\d]{3}.[\d]{3}.[\d]{2}.[\d]{1}", str_2))
#['IP_Add1 192.168.10.1', 'IP_Add1 192.168.10.1', 'IP_Add1 192.168.20.1', 'IP_Add1 192.168.30.1']
这是因为re.findall
将:
返回字符串中所有不重叠匹配项的列表。
但是根据您的措辞,使用re.sub
可以更好地完成您实际要做的事情:
res = re.sub(r"(?<=IP_Add\d )\d{3}\.\d{3}\.(?=\d{2}\.\d{1})", "", str_2)
print(res)
#IP_Add1 10.1 LAN 10
#IP_Add1 10.1 LAN 20
#IP_Add1 20.1 LAN 30
#IP_Add1 30.1 LAN 40
如果要在列表中显示结果,可以调用splitlines()
方法:
print(res.splitlines())
#['IP_Add1 10.1 LAN 10',
# 'IP_Add1 10.1 LAN 20',
# 'IP_Add1 20.1 LAN 30',
# 'IP_Add1 30.1 LAN 40']
sub
中使用的正则表达式模式如下:
(?<=IP_Add\d )
:向后查找文字字符串"IP_Add"
,后面紧跟一个数字和一个空格\d{3}\.\d{3}\.
:三位数字,后跟一个立即数,再后三位数字和一个后缀。(?=\d{2}\.\d{1})
:先查询两位数字,一个句点和一位数字。