首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数字取反

问数字取反
EN

Stack Overflow用户
提问于 2019-04-16 03:02:54
回答 1查看 56关注 0票数 1

我需要取消部分IP地址,只获取最后两个二进制八位数,例如:

代码语言:javascript
复制
IP_Add1 192.168.10.1 LAN 10

我只需要IP Add (10.1)的最后两个八位字节,所以我需要如下输出:

代码语言:javascript
复制
IP_Add1 10.1 LAN 10

我已经尝试了下面的代码,但结果得到了一个空的list []。有什么帮助吗?

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 03:50:43

我已经用下面的代码尝试过了,但得到了一个空的list []

相反,当我运行你的代码时,我得到了以下代码:

代码语言:javascript
复制
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可以更好地完成您实际想要做的事情

代码语言:javascript
复制
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()方法:

代码语言:javascript
复制
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}):前瞻。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55695736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档