首页 > 解决方案 > 正则表达式不适用于 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

标签: pythonpython-2.7

解决方案


首先,我也无法让您的代码在 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']

您正在寻找-字符(不需要转义)而不是数字之间的制表符。


推荐阅读