Notepad++ - 搜索两次出现的相同内容

Notepad++ - 搜索两次出现的相同内容

我想知道是否有办法在同一行中搜索文件中的两个内容。例如,如果我想搜索包含“variable >=”和“variable >=”的行。问题是我不知道“variable”是什么(文件中有很多不同的变量,而我正在一行中搜索重复的变量检查)。

谁能帮我这个?

答案1

您有几个选择...

无论哪种方式,在开始之前:

  • 打开“查找”对话框(Ctrl + f)或“替换”(如果您知道下一步要做什么),
  • 选择对话框左下角的“正则表达式”单选按钮。
  • 在这里,我假设您正在寻找类似variable >= something或的模式的重复项hour >= NUM
  • 此外,我会尽可能地分组,以便您以后可以根据需要保留或丢弃任何部分。

(1)明确查找

您知道重复项,并且可以明确地找到它们,例如:

((variable)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)

或者,对于“小时”,只需将“变量”一词替换为“小时”一词:

((hour)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)

解释:

从左到右,每组括号都是一个组。因此,您将获得以下内容:

第 1 组:: ((variable)\s*>=\s*\S+)查找以“variable”开头、后跟\s(空格)的字符串,*表示任意数量的空格(因此,可以使用“variable>=”或“variable >=”),然后是字符,>=然后是更多\s*字符(任意空格),最后是任何非空格字符\S++表示必须至少有一个)。

第 2 组:: (variable)组 2 位于组 1 内,这只是提取名称“变量”的一种方法。

第 3 组: (.*): 您将找到两个重复项之间的任何内容。这允许您使用此额外文本(如果存在)执行某些操作。
警告,如果有三个重复项(或更多),这将消耗中间的模式,使 group1 和 group4 仅包含第一个和最后一个重复项。如果您想查找连续的重复项,请将此部分更改为(.*?);这?会使其非贪婪,即会找到最小值.(任何值)。

第 4 组: (\2\s*>=\s*\S+): 最后,这是重复的。之所以是重复,是因为模式与组 1 相同,只是它使用了\2,这只是表示组 2 中的内容的一种方式。在本例中,它是单词“变量”。

您会看到,“小时”的第二种模式是相同的,只是它寻找的是“小时”而不是“变量”。

(2)查找未知的重复模式

稍加修改,您就可以搜索相同模式的任何重复项:

((\w+)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)

解释:

这与查找具有明确已知名称的重复项相同。此处的区别在于使用\w+(任何字母数字词),而不是像“variable”/“hour”这样的词。

\w+:\w匹配任何单词字符(包括大写字母、小写字母和数字,但不包括标点符号或其他符号)。 又是+一种表示至少一个的方式。 因此,使用 ,\w+您将找到任何字母数字单词。

答案2

  1. 打开“查找...”对话框
  2. 将“搜索模式”设置为“正则表达式”
  3. 取消选中“.匹配新行”
  4. 搜索:variable\s*?>=.*?variable\s*?>=

相关内容