如果重复行以某种方式启动,如何删除重复的行?
示例输入:
%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;
。
答案 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;
}