查找正则表达式以删除重复项

时间:2017-01-10 15:24:40

标签: python regex

我想找到正则表达式,进行以下匹配(注意有一个换行符!)

inputString:

"a0Ew0"
"a0Ew0"
"a0Ew0s"
"a0Ew0s"

输出:

"a0Ew0"
"a0Ew0s"

5 个答案:

答案 0 :(得分:4)

您可以将列表转换为一组以摆脱重复

请参阅以下内容:https://repl.it/FFOJ/0

l = set(["a0Ew000001UD2t8EAD", "a0Ew000001UD2t8EAD", "a0Ew000001UD4AFEA1", "a0Ew000001UD4AFEA1"])
print(l)

答案 1 :(得分:1)

在这种情况下,

正则表达式不是正确的工具。

如果重复元素是连续的,您可以使用简单的列表理解来实现此目的:

lines=""""a0Ew000001UD2t8EAD"
"a0Ew000001UD2t8EAD"
"a0Ew000001UD4AFEA1"
"a0Ew000001UD4AFEA1"
""".splitlines()

filtered = [l for i,l in enumerate(lines) if i==0 or lines[i-1]!=l ]

只有当它是第一个时才会创建元素(因此,索引== 0测试或前一个元素与当前元素不同)。

结果:

['"a0Ew000001UD2t8EAD"', '"a0Ew000001UD4AFEA1"']

答案 2 :(得分:1)

当你能做到这一点时,你不需要正则表达式:

from collections import OrderedDict

inputString = """"a0Ew0"
"a0Ew0"
"a0Ew0s"
"a0Ew0s"
"""

ls = inputString.split("\n") #splits the string to a list
print(*(list(OrderedDict.fromkeys(ls)))) 

输出:

"a0Ew0" "a0Ew0s" 

答案 3 :(得分:0)

REGEXP:Python

(\w+)

如果连续,你可以删除偶数或奇数元素。
均匀

[0]"a0Ew0ssss" <-- Deleted
[1]"a0Ew0ssss"
[2]"a0Ew0" <-- Deleted
[3]"a0Ew0"
[4]"a0Ew0s" <-- Deleted
[5]"a0Ew0s"

<强>结果:

[0]"a0Ew0ssss"
[1]"a0Ew0"
[2]"a0Ew0s"

答案 4 :(得分:0)

如果你真的,真的想要使用正则表达式,你可以使用negative lookahead (?!...)检查当前组(".+")是否后跟换行符\n及其自身\1

>>> inpt = """"a0Ew000001UD2t8EAD"
"a0Ew000001UD2t8EAD"
"a0Ew000001UD2t8EAD"
"a0Ew000001UD4AFEA1"
"a0Ew000001UD4AFEA1"
"a0Ew000001UD2t8EAD"
"""
>>> re.findall(r'(".+")(?!\n\1)', inpt)
['"a0Ew000001UD2t8EAD"', '"a0Ew000001UD4AFEA1"', '"a0Ew000001UD2t8EAD"']

但相反,我宁愿建议使用例如itertools.groupby

>>> [key for key, group in itertools.groupby(inpt.splitlines())]
['"a0Ew000001UD2t8EAD"', '"a0Ew000001UD4AFEA1"', '"a0Ew000001UD2t8EAD"']

(注意我是如何将第一行的另一个副本添加到数据集的末尾,以表明这两个解决方案只考虑重复的行是它们彼此相继出现,两者之间没有任何内容。如果你也是想要删除中间不同行的重复项,我怀疑是否会有使用正则表达式的解决方案。)