Python/regex:将文件中所有IP地址的第四个八位字节更改为.0
我已经为此奋斗了一天多了;已经3年没有做Python了,现在开始展示! 我想让代码在文件中运行,并使用substitute将每个IP地址的最后八位字节更改为0。re子行不起作用,我在输出文件中得到的不是IP地址,而是以下内容: 0 这是正则表达式匹配对象加上我想要作为最后八位字节的0 还有密码。。。。 导入文件输入 导入re、系统、操作系统 file1='output.txt' ipv4Regex=re.compile(r'[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}') def八位组四0() 对于fileinput.input()中的行: line=ipv4Regex.sub(str(re.search(ipv4Regex,line))+'..”。join(ipv4Regex.split('.')[:-1]+[“0”]),line.strip() #打印(行) 将open(file1,'a')作为f: f、 写入(第+'\n'行) fileinput.close() 打印“当前工作目录:%s”%os.getcwd() 如果名称=“\uuuuu main\uuuuuuuu”: #删除上一个文件 尝试: 删除操作系统(文件1) 除操作错误外: 通过 #运行函数 八位组(4)Python/regex:将文件中所有IP地址的第四个八位字节更改为.0,python,regex,Python,Regex,我已经为此奋斗了一天多了;已经3年没有做Python了,现在开始展示! 我想让代码在文件中运行,并使用substitute将每个IP地址的最后八位字节更改为0。re子行不起作用,我在输出文件中得到的不是IP地址,而是以下内容: 0 这是正则表达式匹配对象加上我想要作为最后八位字节的0 还有密码。。。。 导入文件输入 导入re、系统、操作系统 file1='output.txt' ipv4Regex=re.compile(r'[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}\[0-
我建议保持简单,在捕获组的帮助下匹配所有IP地址:
ip='这里的一些文本127.123.456.789诸如此类'
ip\u out=re.sub(r'\b(\d+\.\d+\.\d+\.\d+\.\d+\b',r'\1.0',ip)
打印(ip输出)#这里有一些文本127.123.456.0诸如此类
ipv4Regex
是一个已编译的正则表达式。您希望ipv4Regex.split('.')
返回什么?如果您有其他带有数字和点的模式,正则表达式可能会收紧。这里有很多这样的正则表达式的例子,所以我不打算在这里临时创建一个。也许检查每个八位组是否在0-255范围内,也许检查边界是否为空白,而不是点。@tripleee OK…但谁说不可能有一个英语句子恰好以1.2.3.4结尾。
,其中最后的点是一个停止?关于IP正则表达式,你是对的,我可以把它做得更紧。除了IP地址之外,OP是否会期待与上述正则表达式匹配的任何其他内容,这一点尚不清楚。这是一个非常好的工作,Tim,非常感谢。我试图让防火墙排除一周的检查点日志。您建议的正则表达式与任何其他数据都不冲突。再次感谢!!我本想说,如果可以的话,我会喊你一杯啤酒,但我刚刚在你的页面上看到了“给我买咖啡”链接。所以明天的咖啡我请客,伙计。@woodze,你这个摇滚兄弟<代码>:-)
import fileinput
import re, sys, os
file1 = 'output.txt'
ipv4Regex = re.compile(r'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
def Octet_4_0():
for line in fileinput.input():
line = ipv4Regex.sub(str(re.search(ipv4Regex,line))+'.'.join(ipv4Regex.split('.')[:-1]+["0"]), line.strip())
#print(line)
with open(file1, 'a') as f:
f.write(line+'\n')
fileinput.close()
print "Current working dir : %s" % os.getcwd()
if __name__ == "__main__":
# Delete the previous file
try:
os.remove(file1)
except OSError:
pass
# Run the function
Octet_4_0()