python - 正则表达式不适用于 Python(旧版本)
问题描述
将文本解析为所需格式后,我必须在另一台机器上运行它,该机器的 python 版本比我使用的版本旧,
我在本地机器上使用的正则表达式是这个:
splitty = [re.sub(r"(.*?)\-\d+\-\d+\-(\d+)", r"\1=\2", i) for i in splitty]
但似乎它不适用于另一个。
我曾尝试查看 python 2.7 的文档和类似的答案,但我没有找到将其转换为 Python 2.7 的方法
实际结果是:
11.22.233.122/19\name_of_machine\t8\t8\t0
所需的是:
11.22.233.122/19\name_of_machine=0
输入字符串:
10.101.0.240/29\tname1\t8\t8\t0
14.101.0.222/29\tname2\t8\t8\t0
11.101.2.211/29\tname3\t8\t7\t1
10.121.2.22/26\tname4\t64\t63\t1
11.201.0.214/29\name5\t8\t6\t2
解决方案
首先,我也无法让您的代码在 Python 3 下运行。其次,您声称的输入字符串似乎不正确:最后一行有\name
而不是,\tname
我怀疑这是错误的。就您的“所需输出”而言,我只能假设“机器名称”将从您的正则表达式判断的行的最后一个数字中获取。
import re
s = """10.101.0.240/29\tname1\t8\t8\t0
14.101.0.222/29\tname2\t8\t8\t0
11.101.2.211/29\tname3\t8\t7\t1
10.121.2.22/26\tname4\t64\t63\t1
11.201.0.214/29\tname5\t8\t6\t2"""
splitty = s.split('\n')
splitty = [re.sub(r"(.*?)\t\d+\t\d+\t(\d+)", r"\1=\2", i) for i in splitty]
print(splitty)
印刷:
['10.101.0.240/29\tname1=0', '14.101.0.222/29\tname2=0', '11.101.2.211/29\tname3=1', '10.121.2.22/26\tname4=1', '11.201.0.214/29\tname5=2']
您正在寻找-
字符(不需要转义)而不是数字之间的制表符。
推荐阅读
- npm - 仅当 PR 合并到 master 时,travis ci 才发布到 npm
- c# - 从构建的 WPF 应用程序中的外部文本文件中读取
- python - 为什么我们使用计数变量 & 以及它是如何工作的?
- python - 如何在 kivy 中隐藏小部件溢出?(就像我们在 CSS 中所做的那样)
- flutter - 未显示中间图标时如何删除图标之间的空格
- android - 协程是否会阻止对象被垃圾收集?
- cucumber - 如果我的功能文件、stepDefinition 文件和 runner 文件位于不同的文件夹中,如何设置步骤定义文件的路径?
- frontend - 在单个后端/前端项目和单独的后端和前端项目之间进行选择
- python - Spyder 没有从 Windows 上的 Anaconda Navigator 启动
- c# - 使用 C# .Net Core 连接到远程 Jaegertracing