使用visual studio regex删除重复项

时间:2014-05-08 11:31:58

标签: regex visual-studio-2012

我在文件中包含以下文字。

abc1
x
abc1
y
abc1
z
abc2
x
abc3
x
abc3
y

这里我想替换下面的副本,但保留下面的字母。

简单地说我希望输出如下所示。

abc1
x
y
z
abc2
x
ab3
x
y

请让我知道如何使用正则表达式在visual studio或任何其他工具中删除这些重复项。我真的无法找到办法。即使是宏也可能会有所帮助。

由于

2 个答案:

答案 0 :(得分:2)

正则表达式可能不是解决此问题的最佳解决方案,但有创造力就可以完成:

(^\w{2,})(?<=^\1(\n\w)*\n\1$)

替换为:

<<empty string>>

说明:

  1. 查找包含字母和数字并且长度超过1个字符的密钥:(^\w{2,})
  2. 回头看看(?<= ... )
  3. 之前是否提到了相同的密钥
  4. 查找我们之前匹配的相同密钥,并且是同一行^\1
  5. 上的唯一内容
  6. 仅使用一个字符(\n\w)*
  7. 跳过任意一行
  8. 跳过我们刚刚阅读的密钥\n\1$
  9. 使用Visual Studio Regex(在编辑器中)似乎有点复杂,这可行:

    (?:\r?\n)?(^\w{2,})(?:\r?\n)?(?<=^\1\r?\n(?:\w\r?\n)*\1)
    

    请参阅:

    enter image description here

答案 1 :(得分:0)

您可以将文本读入一个集合(在c ++和python中),然后输出结果键。 cpp set reference

python示例

for i in set( x for x in open( '1.txt' ).read( ).replace( '\n' ,' ' ).split( ' ' ) if x ):
    print( i )