我需要取消部分IP地址,只获取最后两个二进制八位数,例如:
IP_Add1 192.168.10.1 LAN 10我只需要IP Add (10.1)的最后两个八位字节,所以我需要如下输出:
IP_Add1 10.1 LAN 10我已经尝试了下面的代码,但结果得到了一个空的list []。有什么帮助吗?
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))发布于 2019-04-16 03:50:43
我已经用下面的代码尝试过了,但得到了一个空的list []
相反,当我运行你的代码时,我得到了以下代码:
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 ):的回溯,后面恰好是一个数字和一个space\d{3}\.\d{3}\.:三位数字,然后是一个文字句点,然后是另外三个数字,然后是两位数字、一个句点和一个数字的文字period.(?=\d{2}\.\d{1}):前瞻。https://stackoverflow.com/questions/55695736
复制相似问题