如何在文件中的任何位置查找并删除一组单词/数字?

如何在文件中的任何位置查找并删除一组单词/数字?

因此,我有一个文件,其中包含多组用空格分隔的数字。我处理的数字范围从 1 到 ~5000,并分布到单独的行中,每行包含一组总数。每行中的数字不一定按顺序排列,并且整个列表中的数字都没有重复。

现在,我需要做的是从我已经得到的集合中取出新的数字集来创建新的线条,并删除旧数字以避免重复。

举个例子。假设我有以下几行:

173 177 178 180 183 184 186 187 188 254 255 256 257
1385 1408 1420 1512 2241 2242 2335 2358 2361
3757 3758 3759 3761 3762 3791 3792 3793 3999 4001 4026

我想添加以下行,其中包含从前面几行中获取的数字:

173 177 178 186 2241 2242 2335 3758 3759 3762 3999

我的问题是:如何添加这一行删除前几行重复的数字?我知道我可以用“查找”功能手动完成,但我处理的集合比这些要长得多。我需要花一整天的时间才能找到所有重复项,然后返回并逐一删除它们。

我对 Notepad++ 中的命令等了解甚少,但是有没有一个命令可以为我做到这一点或至少简化这个过程?

答案1

假设您已经有要比较的新行,您可以执行以下操作:

  • Ctrl+H
  • 找什么:(\A|\G[\s\S]*?)\b(\d+)\b\s(?=[\s\S]+\b\2\b)
  • 用。。。来代替:$1
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

(               # group 1
    \A              # beginning of file
  |               # OR
    \G              # resrtart from last match position
    [\s\S]*?        # 0 or more any character, not greedy
)               # end group
\b              # word boundary
(\d+)           # group 2, 1 or more digit
\b              # word boundary
\s              # any kind of space
(?=             # positive lookahead, make sure we have after:
    [\s\S]+         # 1 or more any character
    \b              # word boundary
    \2              # backreference to group 2, the number to find
    \b              # word boundary
)               # end lookahead

替代品:

$1          # content of group 1 (i.e. the acronym)

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

相关内容