python - 数字取反
问题描述
我需要取反部分 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))
解决方案
我已经尝试过使用以下代码,但我得到一个空列表 []
相反,当我运行你的代码时,我得到以下信息:
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}\.
:三位数字后跟一个文字句点,然后是另外 3 位数字和一个文字句点。(?=\d{2}\.\d{1})
: 前瞻两位数,一个句点,然后一位数。
推荐阅读
- python - 如何在 Python 中将输入字符串更改为对象的名称
- azure - Azure 数据工厂查找活动无法执行 CosmosDb 查询“跨分区查询仅支持聚合的‘VALUE’。”
- android - 如何获取 ussd measage 字符串值?
- node.js - 如何通过多对多关系实体ID查找实体
- assembly - GRUB 如何在引导过程中将内核参数传递给内核
- c++ - C++ 同步和原子软件事务内存
- javascript - 如何在 ReactJS 中单击按钮重定向
- javascript - 由于类型不正确,Prisma 更新功能失败
- google-cloud-build - 修补 CloudBuild 触发器
- javascript - 在JavaScript中的对象函数中删除对象的引用本身