正则表达式仅选择包含两个搜索词的行?

正则表达式仅选择包含两个搜索词的行?

我对正则表达式不是很熟悉,所以我不知道该怎么做。假设我有一个包含 1000 多行数据的文本文件。我想搜索单词“command”和“find”。它们出现在整个文档的许多地方,但只有在第 100 行才出现在同一行,例如:The linux command to search files and folders is find. 假设我不知道这两个词的顺序,也不知道它们在行内的位置。

是否可以使用正则表达式在搜索“命令”和“查找”时直接选择这一行,而忽略这些词只出现一次的其他行?

答案1

尝试在 Sublime text 中尝试^.*(command|find).*$(就像我在 Windows 10 上的 ST3 中尝试过的那样)。
我的答案是基于回答在堆栈溢出中。

编辑:上面的 RE 允许“command”或“find”,而不是同时使用两者。另一方面,它允许结果中包含“commander”、“finding”或“viewfinder”等不必要的表达。

(\<command\>.*\<find\>)|(\<find\>.*\<command\>)

消除了这些错误命中。请注意 \< 和 > 序列,它们表示单词的开头和结尾。

答案2

在 中vim,您可以使用.*\<command\>\&.*\<find\>。正如 Gombai Sándor 所指出的,\<…\>分隔单词,因此,如果您只想搜索字符串“command” 和 “find” (即使它们作为较长单词的一部分出现,例如“commander”)你可以省略\<and \>

参考:gvim 混合 AND 和 OR 条件的搜索查询

注意:这有一个小缺点,就是它会将光标留在行首(包含两个单词),而不是留在所搜索的单词本身上(除非它出现在行首)。

答案3

寻找:

^.*(?i-s)(COMMAND).*?(FIND).*$|(?2).*?(?1)

或者:

(?i-s)^.*\W(COMMAND\W.*\WFIND|FIND\W.*\WCOMMAND)\W.*\R

相关内容