我想知道是否有办法在同一行中搜索文件中的两个内容。例如,如果我想搜索包含“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
- 打开“查找...”对话框
- 将“搜索模式”设置为“正则表达式”
- 取消选中“.匹配新行”
- 搜索:
variable\s*?>=.*?variable\s*?>=