web-dev-qa-db-ja.com

VSコードで複数の用語を検索する

VS Codeで「Word1 Word2」という用語を検索するとします。次に、「Word1」の後に「Word2」が続くすべての出現箇所を検索します。実際には、Word1とWord2が出現するすべてのファイルを検索したいのですが、連続している必要はありません。どうすればできますか?

14
becko

正規表現フラグを使用して(Word1[\s\S\n]*Word2)|(Word2[\s\S\n]*Word1)を検索します

22
Alex

VSCodeには 未解決の問題 があり、複数の検索をサポートしています。あなたはそこに乗り、それらを少しプッシュしたいかもしれません。

5
pushkin

皆さんのために

1つのファイルで複数の単語(2つ以上)を一度に検索し、すべての単語をファイルに少なくとも1回表示する必要がある場合(論理AND)、先読みアサーションを利用する次の正規表現を使用できます。

_^(?=[\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]*$
_

次の条件のallの場合にのみ、どちらがファイルと一致します。

  • 文字列_pattern with space_が少なくとも1回出現しています。
  • _option1_または_option2_の少なくとも1つの出現があります。
  • Word境界アサーションで区切られたWord _Word3_が少なくとも1回出現しています。
  • 文字列_repeated pattern._が6回以上繰り返されています(例:_repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern._)。

ご覧のとおり、空だけが限界です。楽しんで!

1
tonix