取两个字符串中的元素,然后比较
Take elements that are in both strings, then compare
我有两个字符串:
machine1 19968MB 15375MB 23%
machine2 79872MB 61501MB 23%
machine3 798720MB 615014MB 23%
machine1 9968MB 15375MB 13%
machine2 19872MB 61501MB 33%
machine4 798720MB 615014MB 23%
我想比较两个字符串中存在的所有机器,为此,我正在这样做:
pat = 'machine_\S+'
machines1 = re.findall(pat, string1)
machines2 = re.findall(pat, string2)
intersect = set(machines1) & set(machines2)
newstring1 = '\n'.join(line for line in string1.splitlines() if
re.search(pat, line).group() in intersect)
newstring2 = '\n'.join(line for line in string2.splitlines() if
re.search(pat, line).group() in intersect)
Newstring1 应该是这样的:
machine1 19968MB 15375MB 23%
machine2 79872MB 61501MB 23%
和 Newstring2 这个:
machine1 9968MB 15375MB 13%
machine2 19872MB 61501MB 33%
但问题是,有时,这些机器的名称可能会更改为另一种格式,而正则表达式无法做到这一点..
其他格式的示例(可以是任何格式,我认为正则表达式不是解决方案):
test_volume1 19968MB 15375MB 23%
testing_nfs 19968MB 15375MB 23%
有没有办法做到这一点,但不使用正则表达式?
如果您的机器名称总是在行的开头,您可以使用 line.split(" ")[0]
来获取机器名称。
machines1 = [line.split(" ")[0] for line in string1.splitlines()]
machines2 = [line.split(" ")[0] for line in string2.splitlines()]
intersect = set(machines1) & set(machines2)
newstring1 = '\n'.join(line for line in string1.splitlines() if
line.split(" ")[0] in intersect)
newstring2 = '\n'.join(line for line in string2.splitlines() if
line.split(" ")[0] in intersect)
您可以做的是获取每行的第一个单词:
machines1 = [line.split()[0] for line in string1.splitlines()]
machines2 = [line.split()[0] for line in string2.splitlines()]
如果单词是 space 分隔的,这应该可以解决问题,否则,您可以在 .split()
中精确分隔
我有两个字符串:
machine1 19968MB 15375MB 23%
machine2 79872MB 61501MB 23%
machine3 798720MB 615014MB 23%
machine1 9968MB 15375MB 13%
machine2 19872MB 61501MB 33%
machine4 798720MB 615014MB 23%
我想比较两个字符串中存在的所有机器,为此,我正在这样做:
pat = 'machine_\S+'
machines1 = re.findall(pat, string1)
machines2 = re.findall(pat, string2)
intersect = set(machines1) & set(machines2)
newstring1 = '\n'.join(line for line in string1.splitlines() if
re.search(pat, line).group() in intersect)
newstring2 = '\n'.join(line for line in string2.splitlines() if
re.search(pat, line).group() in intersect)
Newstring1 应该是这样的:
machine1 19968MB 15375MB 23%
machine2 79872MB 61501MB 23%
和 Newstring2 这个:
machine1 9968MB 15375MB 13%
machine2 19872MB 61501MB 33%
但问题是,有时,这些机器的名称可能会更改为另一种格式,而正则表达式无法做到这一点..
其他格式的示例(可以是任何格式,我认为正则表达式不是解决方案):
test_volume1 19968MB 15375MB 23%
testing_nfs 19968MB 15375MB 23%
有没有办法做到这一点,但不使用正则表达式?
如果您的机器名称总是在行的开头,您可以使用 line.split(" ")[0]
来获取机器名称。
machines1 = [line.split(" ")[0] for line in string1.splitlines()]
machines2 = [line.split(" ")[0] for line in string2.splitlines()]
intersect = set(machines1) & set(machines2)
newstring1 = '\n'.join(line for line in string1.splitlines() if
line.split(" ")[0] in intersect)
newstring2 = '\n'.join(line for line in string2.splitlines() if
line.split(" ")[0] in intersect)
您可以做的是获取每行的第一个单词:
machines1 = [line.split()[0] for line in string1.splitlines()]
machines2 = [line.split()[0] for line in string2.splitlines()]
如果单词是 space 分隔的,这应该可以解决问题,否则,您可以在 .split()