【问题标题】:Take elements that are in both strings, then compare取两个字符串中的元素,然后比较
【发布时间】:2021-09-01 00:49:50
【问题描述】:

我有两个字符串:

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% 

有没有办法做到这一点,但不使用正则表达式?

【问题讨论】:

  • @anubhava 我编辑了问题,当我说格式时,我的意思是机器的名称,它可以有任何名称......
  • 可以试试:pat = r'^\S+'

标签: python regex string comparator


【解决方案1】:

如果您的机器名称总是在行首,您可以使用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)

【讨论】:

    【解决方案2】:

    你可以做的是获取每行的第一个单词:

    machines1 = [line.split()[0] for line in string1.splitlines()]
    machines2 = [line.split()[0] for line in string2.splitlines()]
    

    如果单词是空格分隔的,这应该可以解决问题,否则,您可以在 .split() 中精确分隔符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多