VS Codeで「Word1 Word2」という用語を検索するとします。次に、「Word1」の後に「Word2」が続くすべての出現箇所を検索します。実際には、Word1とWord2が出現するすべてのファイルを検索したいのですが、連続している必要はありません。どうすればできますか?
正規表現フラグを使用して(Word1[\s\S\n]*Word2)|(Word2[\s\S\n]*Word1)
を検索します
VSCodeには 未解決の問題 があり、複数の検索をサポートしています。あなたはそこに乗り、それらを少しプッシュしたいかもしれません。
皆さんのために
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つの出現があります。Word3
_が少なくとも1回出現しています。repeated pattern.
_が6回以上繰り返されています(例:_repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.repeated pattern.
_)。ご覧のとおり、空だけが限界です。楽しんで!