regex 在VS代码中搜索多个术语

6vl6ewon  于 2023-01-14  发布在  其他
关注(0)|答案(9)|浏览(156)

假设我在VS Code上搜索单词“word1 word2”。然后它会找到所有出现“word1”后面跟“word2”的地方。实际上我想找到所有出现word1和word2的文件,但它们不必连续。我该怎么做呢?

igsr9ssn

igsr9ssn1#

使用regex标志并搜索(word1[\s\S\n]*word2)|(word2[\s\S\n]*word1)
基于@tonix regex进行了一个小扩展:
https://marketplace.visualstudio.com/items?itemName=usernamehw.search

6qqygrtg

6qqygrtg2#

对于简单的需求,这里也有一个简单的方法-将其用作正则表达式

(word1)|(word2)|(word3)

它可能不能涵盖一些情况,但对我来说一直工作得很好,而且很容易记住输入它。

ttvkxqim

ttvkxqim3#

VSCode有一个open issue来支持多个搜索。你可能想上那里去推一推。

kmpatx3s

kmpatx3s4#

应用逻辑与(?=.* 字1)(?=.* 字2)(?=.* 字3)
应用逻辑或(word1)|(字2)|(字3)

2hh7jdfx

2hh7jdfx5#

对你们来说,
如果你想在一个文件中同时搜索多个单词(超过2个),并且所有单词必须在文件中至少出现一次(逻辑AND),你可以使用下面的正则表达式来利用lookaheadAssert:

^(?=[\s\S\n]*(word1))(?=[\s\S\n]*(word2))(?=[\s\S\n]*(word3))(?=[\s\S\n]*(word4))[\s\S\n]*$

使用此模式的全局搜索将仅返回以任意顺序包含word1 AND word2 AND word3 AND word4的所有文件(例如,word4可能出现在文件的开头和/或word2可能出现在文件的结尾)。
我还编写了一个小的Python CLI助手,它可以根据您想要AND的模式自动创建正则表达式(尽管手工创建正则表达式非常简单)。
复制下面的代码,粘贴到一个新的文件中,并保存在你机器上的某个地方(我称之为regex_and_lookahead.py),然后用chmod +x ./regex_and_lookahead.py使这个文件可执行(重要的是,我使用的是Python 3.6,字面前缀f-〉f'(?=[\s\S\\n]*({arg}))'在以前的版本中不起作用):

#!/usr/bin/env python
from sys import argv

args = argv[1:]
regex = '^'
for arg in args:
    regex += f'(?=[\s\S\\n]*({arg}))'
regex += '[\s\S\\n]*$'

print(regex)

用法:

./regex_and_lookahead.py word1 word2 word3 word4

将生成上面的正则表达式。你也可以用它来生成更复杂的正则表达式,因为每个参数都可以有正则表达式字符!
例如:

./regex_and_lookahead.py "pattern with space" "option1|option2" "\bword3\b" "(repeated pattern\.){6}"

将生成以下正则表达式:

^(?=[\s\S\n]*(pattern with space))(?=[\s\S\n]*(option1|option2))(?=[\s\S\n]*(\bword3\b))(?=[\s\S\n]*((repeated pattern\.){6}))[\s\S\n]*$

当且仅当下列条件全部为真时,它才与文件匹配:

  • 字符串pattern with space至少出现一次;
  • option1option2至少出现一次;
  • 单词word3至少出现一次,由单词边界Assert分隔;
  • 字符串repeated pattern.至少出现一次,重复6次(即:repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.)。

如你所见,天空是唯一的极限。玩得开心!

yb3bgrhw

yb3bgrhw6#

这是现在支持,你可以搜索的术语,然后打开编辑器,并使用ctrl + f搜索结果thanks @pushkin

u59ebvdq

u59ebvdq7#

此扩展名:查找和转换,我是作者,使它相当容易做任何数量的顺序搜索文件只使用文件从以前的搜索结果为未来的搜索。
有一个变量${resultsFiles},它解析为以前的搜索结果文件,并且可以在"filesToInclude"参数中使用。

{
  "key": "alt+b",
  "command": "runInSearchPanel",
  "args": {
    
    "find": ["first", "second"],
    "delay": 2000,              // necessary to allow results to populate
    // delay may need to be longer if you are searching a lot of files 

    "replace": ["", "knuckles"],   // optional
    
    "filesToInclude": ["", "${resultsFiles}"],
    "filesToExclude": "Users\\Mark\\AppData\\Roaming\\Code\\User\\keybindings.json",
    
    "isRegex": true,

    // so that the first search will be triggered and produce results
    "triggerSearch": true,

    "triggerReplaceAll": [false, true]   // optional
  }
}
  1. "find": ["first", "second"],:搜索first,然后搜索second
  2. "filesToInclude": ["", "${resultsFiles}"],:第一次搜索时清除filesToInclude,第二次搜索时使用第一次搜索的resultFiles
    1.您可以根据需要执行任意数量的顺序搜索
  3. finds可以是regex的,也可以是任意复杂的

mec1mxoz

mec1mxoz8#

最初的问题要求对同一文件中包含两个单独单词的文件执行一次搜索。下面是我使用多次搜索在同一文件中搜索两个(或更多)单词时所做的操作:
1.像往常一样搜索
1.点击“在编辑器中打开”x1c 0d1x
1.调整上下文行计数。(上下文计数越高,您可以搜索的第二个词越多,但您引入的不相关搜索也越多)

1.点击Cmd + F(如果不在Mac上,也可以是类似的),然后在那里搜索。在下面的图片中,我已经将搜索范围缩小到53个匹配项。我可以手动跳过,直到找到它。

需要更多微调?
1.步骤与1 - 3相同
1.将内容复制到一个文件中(在下面的图片中,我将其保存到一个名为haystack.ts的文件中)
1.在这里搜索第三个单词(在下面的图片中,我已经将搜索范围缩小到7个)。

2fjabf4q

2fjabf4q9#

尝试Open new Search Editor command,通过命令面板,你可以Map到任何键绑定你想在键盘编辑器.我Map到cmd+shift+i

这对我很有帮助!
还有一种方法,在搜索编辑器中使用up/ down箭头键,在搜索历史中移动我们,即使这样也很有用
它需要一点弯曲的心态来接受它等同于有多个搜索编辑器(IntelliJ等提供的),但没有持久性!

相关问题