web-dev-qa-db-ja.com

Notepad ++を使用して順列の同じ行に複数の値を見つけるにはどうすればよいですか?

Notepad ++を使用していて、同じ行で複数の値を検索できる方法を見つけようとしています。値の順序がわからない可能性があるため、現在、正規表現検索は機能していません。

たとえば、3つの特定の値を持つコード行を検索したいとします。値の順序を知っている必要があるため、正規表現検索で.*を使用しても機能しません。値の順序を知らなくても、これらの行を検索できますか?

各行には、おそらく30の異なるタグを持つ取引ログがあります。 35=D, EUR/USD, 150=8を検索したい。 3つすべての値が存在するエントリのみを検索します。

私が遭遇する問題は、これらのタグの順序が保証されていないことです。そのため、以下で使用する正規表現検索では、必要な各エントリが常に見つかるとは限りません。

35=D.*EUR/USD.*150=8
13
Gruff

lookahead の使用ははるかに効率的であり、複雑さを増すことなく、任意の数の代替を処理できます。

  • Ctrl+F
  • "検索結果"^(?=.*\b35=D\b)(?=.*\bEUR/USD\b)(?=.*\b150=8\b).+$
  • チェック "大文字と小文字の区別"
  • チェック「折り返し」
  • チェック "正規表現"
  • チェックをはずす ".は改行に一致します "
  • Find All in Current Document

説明:

^               # Beginning of line
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary to be sure not matching 135=DATA
    35=D        # Literally
    \b          # Word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    EUR/USD     # Literally
    \b          # Word boundary
  )             # End lookahead
  (?=           # Start positive lookaead, make sure we have after:
    .*          # 0 or more any character but newline
    \b          # Word boundary
    150=8       # Literally
    \b          # Word boundary
  )             # End lookahead
  .+            # One or more any character but newline
$               # End of line

画面キャプチャ:

Enter image description here

22
Toto

3つの文字列がすべて存在する行のみに一致させるには、代替の|演算子を使用してパターンを(...)にグループ化し、可能なすべての順列の正規表現を作成します。

(35=D.*EUR/USD.*150=8)|(35=D.*150=8.*EUR/USD)|(EUR/USD.*150=8.*35=D)|(EUR/USD.*35=D.*150=8)|(150=8.*35=D.*EUR/USD)|(150=8.*EUR/USD.*35=D)

改行が追加された読みやすいバージョン:

(35=D.*EUR/USD.*150=8)|
(35=D.*150=8.*EUR/USD)|
(EUR/USD.*150=8.*35=D)|
(EUR/USD.*35=D.*150=8)|
(150=8.*35=D.*EUR/USD)|
(150=8.*EUR/USD.*35=D)

これは、35=DEUR/USDおよび150=8(およびその間のテキスト)の組み合わせが存在するすべての行に一致します。このサンプルテキストでは、最後の3行のみが一致します([現在のドキュメントのすべてを検索]ボタン):

some text 35=D
some text EUR/USD more text 150=8
some text 35=D more text EUR/USD more text 150=8
some text EUR/USD more text 35=D more text 150=8 more text
some text 150=8 more text EUR/USD 35=D more text


screenshot

10
Freddy