删除以某些字符串开头的重复行

时间:2018-03-28 08:43:45

标签: python

如果重复行以某种方式启动,如何删除重复的行?

示例输入:

%start _CreditsInfo
-(half) userCoins {
return 1;
}
%start _CreditsInfo
-(half) userLives {
return 1;
}

请求的输出:

%start _CreditsInfo
-(half) userCoins {
return 1;
}
-(half) userLives {
return 1;
}

正如您所看到的,正常的重复删除不起作用,我不想删除除%start之外的其他重复项,例如return x;

1 个答案:

答案 0 :(得分:1)

将每个行开头(前缀)变为正则表达式,并保留一组您已经看过的行。

import re

class DuplicateFinder(object):

    def __init__(self, *prefixes):
        self.regexs = [re.compile('^{0}'.format(p)) for p in prefixes]
        self.duplicates = set()

    def not_duplicate(self, line):
        found = reduce(lambda r, p: r or p.search(line), self.regexs, False)
        if found:
            if found.re.pattern not in self.duplicates:
                self.duplicates.add(found.re.pattern)
                return True
            else:
                return False
        return True

df = DuplicateFinder('%start', '%other_start')


lines = """%start _CreditsInfo
-(half) userCoins {
return 1;
}
%start _CreditsInfo
-(half) userLives {
return 1;
}""".splitlines()

result = filter(df.not_duplicate, lines)

print '\n'.join(result)

产地:

%start _CreditsInfo
-(half) userCoins {
return 1;
}
-(half) userLives {
return 1;
}